2011-11-22 11 views
5

मेरे पास एक फ़ाइल है जो overlay.xul को ओवरराइट करती है जो browser.xul को ओवरराइट करती है। मैं क्रोम एक्सटेंशन में लागू किए गए संदेश को उसी तरह से कार्यान्वित करना चाहता हूं।फ़ायरफ़ॉक्स एक्सटेंशन में गुजरने वाले संदेश को कैसे कार्यान्वित करें?

chrome.manifest-

content helloworld content/ 
overlay chrome://browser/content/browser.xul chrome://helloworld/content/overlay.xul 
overlay chrome://navigator/content/navigator.xul chrome://helloworld/content/overlay.xul 


skin helloworld classic/1.0 skin/ 
style chrome://global/content/customizeToolbar.xul chrome://helloworld/content/overlay.css 

मैं कैसे content_script.js जो मेरे मामले में overlay.js है रजिस्टर करने के लिए?

Overlay.xul -

<script type="application/x-javascript" src="chrome://helloworld/content/jquery.js" /> 
<script type="application/x-javascript" src="chrome://helloworld/content/overlay.js" /> 
<script type="application/x-javascript" src="chrome://helloworld/content/background.js" /> 

अब अंदर मेरे overlay.js मैं उपयोग कर रहा हूँ - background.js है-

addMessageListener("MyMessenger.MyMessage", function(obj) { 

    Firebug.Console.log(obj.name); 
}, true); 
  • क्या सही सिंटैक्स है

    document.documentElement.addEventListener('click', function(e) { 
    
        messageManager.sendAsyncMessage('MyMessenger.MyMessage', {}); 
    
    }, true); 
    

    और संदेश पास करने के लिए?

  • मैं सामग्री स्क्रिप्ट और ब्राउज़र स्क्रिप्ट के बीच कनेक्शन को कैसे कॉन्फ़िगर कर सकता हूं?

उत्तर

0

यदि आप केवल इतना में वास्तव में एक सामग्री स्क्रिप्ट इंजेक्शन लगाने और इसके साथ संचार कर रहा है रुचि रखते हैं तो यह Add-on SDK, विशेष रूप से page-mod package उपयोग करना आसान होना चाहिए। यह सामग्री स्क्रिप्ट को आसानी से इंजेक्ट करने की अनुमति देता है और संवाद करने का एक तरीका प्रदान करता है (मैंने उल्लेख किए गए दस्तावेज़ों में "सामग्री स्क्रिप्ट के साथ संचार" अनुभाग देखें)।

messageManager के रूप में, यह एक बहु-प्रक्रिया वातावरण के लिए है, लेकिन यह वर्तमान एकल-प्रक्रिया फ़ायरफ़ॉक्स में भी काम करेगा। उपरोक्त आपके कोड के साथ मुख्य समस्या यह है: addMessageListener वैश्विक कार्य नहीं है, आपको messageManager.addMessageListener() पर कॉल करना चाहिए। लेकिन उसी नामस्थान में लोड की गई स्क्रिप्ट के बीच संदेशों को पारित करने के लिए messageManager का उपयोग करके और एक दूसरे को सीधे कॉल कर सकते हैं।

वर्तमान टैब में एक सामग्री स्क्रिप्ट ओवरले में स्क्रिप्ट करना होगा के साथ संवाद करने के लिए:

gBrowser.selectedBrowser.messageManager.sendAsyncMessage('MyMessenger.MyMessage', {}); 

और सामग्री स्क्रिप्ट वास्तव में एक वैश्विक समारोह के रूप में addMessageListener होता तो यह काम करना चाहिए:

addMessageListener("MyMessenger.MyMessage", function(obj) { 
    console.log(obj.name); 
}); 
संबंधित मुद्दे