2010-10-22 10 views
9

मैं एक स्क्रिप्ट फ़ाइल को उपयोगकर्ता परिभाषित वेबसाइटों पर लोड करने से रोकने की कोशिश कर रहा हूं। एक स्क्रिप्ट फ़ाइल को ब्लॉक करने के लिए मैं beforeload event और event.preventDefault(); सामग्री स्क्रिप्ट में उपयोग कर रहा हूं जो तब तक ठीक काम करता है जब तक कि मुझे पहले से ही वेबसाइट सूची पता है। मेरी समस्या यह है कि मैं पहले से ही वेबसाइट सूची नहीं जानता, इसलिए वेबसाइट सूची प्राप्त करने के लिए मैं पृष्ठभूमि पृष्ठ पर एक अनुरोध भेज रहा हूं लेकिन प्रतिक्रिया असीमित और अनुपयोगी है।क्रोम एक्सटेंशन में सिंक्रोनस संदेश गुजर रहा है?

क्या कोई सिंक्रोनस क्रोम एक्सटेंशन में गुजरने वाला संदेश है जिसे मैं संभवतः Google के दस्तावेज़ों में याद करता हूं?

// my (simplified) code from content script: 
document.addEventListener("beforeload", function(event) 
{ 
    chrome.extension.sendRequest({fnc:"is_owner"}, function(response) 
    { 
    // asynchronous response is not usable because 
    // all scripts have already been loaded 
    if (response.is_owner) event.preventDefault(); 
    }); 
}, true); 
+1

एक और समस्या [https://code.google.com/p/chromium/issues/detail?id=135095&thanks=135095&ts=1340923674) एक ही समस्या के –

उत्तर

6

दुर्भाग्यवश ऐसा नहीं है। एक bug report सिंक्रोनस संदेश गुजरने की कमी के बारे में खोला गया है, शायद अगर पर्याप्त लोग इसे तारांकित करते हैं तो वे इसके बारे में कुछ करेंगे।

+0

लिंक के लिए धन्यवाद, मैंने इसे देखा। –

+0

समस्या अब WontFix के रूप में बंद है :( – cprcrack

1

आप फ़ाइल में सेटिंग्स को स्टोर करने के लिए HTML5 फ़ाइल एपीआई (navigator.webkitTemporaryStorage या पुराने बहिष्कृत window.webkitStorageInfo टेम्पलेट विकल्प के साथ) का उपयोग कर सकते हैं। यह हिस्सा असीमित है लेकिन आप इसे पृष्ठभूमि या अपने विकल्प पृष्ठ या पॉपअप से कर सकते हैं। यह एपीआई आप पर बदल सकता है क्योंकि यह अभी तक मानकीकृत नहीं है। चूंकि यह अस्थायी भंडारण है, इसलिए क्रोम को फ़ाइल को हटाने से रोकने के लिए आपके पृष्ठभूमि पृष्ठ को लगातार चलने की आवश्यकता हो सकती है।

फिर अपनी सामग्री स्क्रिप्ट से आप "फाइल सिस्टम:" + chrome.extension.getURL ("अस्थायी /" + फ़ाइल नाम) से फ़ाइल प्राप्त करने के लिए सिंक्रोनस XMLHttpRequest का उपयोग कर सकते हैं। "फाइल सिस्टम:" यूआरएल पर उपसर्ग बल्कि महत्वपूर्ण है।

सर्वश्रेष्ठ शर्त आपकी सेटिंग्स के लिए chrome.storage API (या localStorage) का उपयोग करना है और अस्थायी फ़ाइल को अद्यतन करने के लिए उस से चालू ईवेंट को हुक करना है। यदि आपको सेटिंग बदलने के बाद पृष्ठ को फिर से लोड करने की आवश्यकता है, तो आप फ़ाइलसिस्टम लिखने के ऑपरेशन से कॉलबैक में ऐसा करना चाहेंगे ताकि आप जान सकें कि सामग्री स्क्रिप्ट परिवर्तन को देख सकती है।

इसे मैनिफेस्ट में किसी विशेष अनुमति की आवश्यकता नहीं है। मैंने व्यक्तिगत रूप से क्रोम 35 में इसका परीक्षण किया है, लेकिन मुझे पता है कि यह पिछले संस्करणों में भी काम करता था। हालांकि, मुझे न्यूनतम संस्करण आवश्यकता नहीं है। मुझे क्रोम 33 में एक सुरक्षा परिवर्तन से संबंधित रिग्रेशन का उल्लेख याद है, जहां यह काम नहीं करता था लेकिन जल्दी से तय किया गया था।

मैंने पृष्ठ की अपनी स्क्रिप्ट चलाने से पहले सामग्री स्क्रिप्ट में सेटिंग्स प्राप्त करने के लिए कुछ अन्य कामकाज (उदाहरण के लिए ब्लॉब यूआरएल या डेटा यूरी पर ब्लूब यूआरएल या डेटा यूरी को रीडायरेक्ट किया है) लेकिन जहां तक ​​मैं कह सकता हूं कि वे सभी जानबूझकर हैं सामान्य एक्सएसएस और विस्तार सुरक्षा सुधारों के कारण क्रोम के हाल के संस्करणों में टूटा हुआ।

+0

आपके ज्ञान के अनुसार, क्या यह अभी भी एक व्यावहारिक समाधान है? –

संबंधित मुद्दे