2012-10-04 12 views
6

में main.js से सामग्री स्क्रिप्ट फ़ंक्शन को कैसे कॉल करें I फ़ायरफ़ॉक्स एडन डेवलपमेंट में नया हूं।फ़ायरफ़ॉक्स एडन

मुझे फ़ायरफ़ॉक्स एडन में main.js से सामग्रीस्क्रिप्ट फ़ंक्शन को कॉल करने का एक तरीका चाहिए।

मैंने प्रत्येक उद्घाटन वेबपृष्ठ पर सामग्रीक्रिप्ट xyz.js इंजेक्शन दिया है।

मैं नेविगेशन टूलबार में एक बटन के क्लिक पर मेरे main.js से मेरी सामग्रीक्रिप्ट xyz.js में फ़ंक्शन एबीसी() को कॉल करना चाहता हूं।

नीचे मेरा कोड है।

main.js

.. 
function addToolbarButton() { 
    var document = mediator.getMostRecentWindow('navigator:browser').document;   
    var navBar = document.getElementById('nav-bar'); 
    if (!navBar) { 
     return; 
    } 
    var btn = document.createElement('toolbarbutton'); 
    btn.setAttribute('id', 'mybutton-id'); 
    btn.setAttribute('type', 'button'); 
    btn.setAttribute('class', 'toolbarbutton-1'); 
    btn.setAttribute('image', data.url('icon_16.png')); 
    btn.setAttribute('orient', 'vertical'); 
     btn.setAttribute('label', 'Test'); 
     btn.addEventListener('click', function() { 
      tabs.activeTab.attach({ 
      // 

       abc()  //here i want to call the function present in my contentscript 

      // 
     }); 
     }, false) 
    navBar.appendChild(btn); 
} 

.. 

xyz.js

.. 

function abc(){ 
//here is my code logic 
} 

.. 

मैं जानना चाहता हूँ कि संदेश गुजर इतना लेकिन फ़ायरफ़ॉक्स में लागू करने में असमर्थ करने के लिए रास्ता है आया था।

कृपया मेरी मदद करें मुझे अटक गया है।

उत्तर

4

आप फ़ंक्शन को सीधे कॉल नहीं कर सकते हैं, आपको सामग्री स्क्रिप्ट पर एक संदेश भेजने की आवश्यकता है।

var worker = tabs.activeTab.attach({ 
    ... 
}); 

// Some time later 
worker.postMessage("doABC"); 

और सामग्री स्क्रिप्ट में: ऐसा ही कुछ मतलब

self.on("message", function(message) { 
    if (message == "doABC") 
    abc(); 
}); 

अधिक जानकारी के लिए सामग्री स्क्रिप्ट के साथ संवाद स्थापित करने पर documentation देखते हैं।

+0

एसओ पर यह एक बहुत ही आम सवाल है - क्या हमें फिर से जवाब देने के बजाय एक कैननिकल उत्तर से लिंक करना शुरू करना चाहिए? – canuckistani

+0

@ कनककिस्तान: क्या कोई कैनोलिक जवाब है? मेरा जवाब यहां एक विस्तारित आरटीएफएम है। ज्यादातर समय हालांकि यह ऐसे लोग हैं जो एसडीके के संदेश दृष्टिकोण के आसपास अपने दिमाग को लपेट नहीं सकते हैं। मैं इन प्रश्नों को डुप्लिकेट के रूप में बंद करने के लिए सब कुछ करूँगा लेकिन ऐसा कोई सवाल नहीं है जो काफी समान है (संभवतः "बहुत स्थानीय" का संकेत भी)। –

+0

मैंने इन सवालों के हाल के इतिहास की समीक्षा की और सहमति व्यक्त की - सभी बस काफी अलग हैं। सही दिशा में उन्हें इंगित करने के लिए धैर्य रखने के लिए धन्यवाद। – canuckistani

1

दस्तावेज़ीकरण के अनुसार इसे इस तरह से काम करना चाहिए;

हालांकि मेरे पास समान प्रश्न Accessing pre-loaded content script from ActionButton अभी तक हल नहीं हुआ है।

// main.js 
function handleClick(state) { 
    var myWorker = tabs.activeTab.attach({ 

    }); 
    myWorker.port.emit("initialize", "Message from the add-on"); 
} 

// content.js 
/*BEGIN Listen events coming from Add-on script*/ 
self.port.on("initialize", function() { 
    alert('self.port.on("initialize")'); 
    return; 
}); 
संबंधित मुद्दे