2012-03-05 16 views
5

में गुजरने वाले पैनल और पेजमोड सामग्री स्क्रिप्ट संदेश फ़ायरफ़ॉक्स ऐड-ऑन एसडीके का उपयोग करके फ़ायरफ़ॉक्स में क्रोम एक्सटेंशन पोर्ट करने पर काम कर रहा हूं।फ़ायरफ़ॉक्स एक्सटेंशन

एक्सटेंशन में toolbar button (क्रोम की पॉपअप.html + ब्राउज़र कार्रवाई के समतुल्य) और पेजमोड सामग्री स्क्रिप्ट के लिए एक पैनल शामिल है।

जब पैनल खुलता है, तो उस पृष्ठ से कुछ जानकारी वाले किसी ऑब्जेक्ट को प्राप्त करने के लिए उसे वर्तमान टैब की सामग्री स्क्रिप्ट पर एक संदेश भेजने की आवश्यकता होती है। जिस हिस्से में मुझे परेशानी हो रही है वह वास्तव में संदेश पास करने का तरीका है। क्या कोई मुझे सही दिशा में इंगित करने में मदद कर सकता है? क्रोम एक्सटेंशन डेवलपर फ़ायरफ़ॉक्स एडन डेवलपमेंट सीखने में सहायता के लिए मुझे कई संसाधन नहीं मिल रहे हैं।

निम्न प्रश्न क्रोम पर्यावरण में इस अवधारणा को दर्शाता है। मुझे बस फ़ायरफ़ॉक्स पर पोर्टिंग करने में मदद की ज़रूरत है। आप कार्यकर्ताओं आपके द्वारा बनाए गए के साथ संवाद -
Chrome Extension - Message Passing from Popup to Content Script

उत्तर

9

यह कुछ हद तक अधिक ऐड-ऑन एसडीके क्योंकि आप टैब के साथ वहाँ से संवाद नहीं है के साथ जटिल है। और सिस्टम मजदूरों का ट्रैक नहीं रखेगा, आपको इसे स्वयं करना होगा। कुछ इस तरह (अपरीक्षित कोड) काम करना चाहिए:

var workers = []; 
var pageMod = require("page-mod"); 
pageMod.PageMod({ 
    include: ..., 
    contentScriptFile: ..., 
    onAttach: function(worker) 
    { 
    workers.push(worker); 
    worker.on("detach", function() 
    { 
     var index = workers.indexOf(worker); 
     if (index >= 0) 
     workers.splice(index, 1); 
    }); 
    } 
}); 

यह सुनिश्चित करें कि workers चर सक्रिय कार्यकर्ता (Worker object documentation) की सूची होती है बनाता है। तो जब आप कार्यकर्ता किसी विशेष टैब आप ऐसा करते हैं करने के लिए आवंटित करने के लिए एक संदेश भेजने के लिए की जरूरत है:

var tabs = require('tabs'); 
for (var i = 0; i < workers.length; i++) 
    if (workers[i].tab == tabs.activeTab) 
    worker.postMessage(...); 

बेशक आप सामग्री स्क्रिप्ट से न केवल विस्तार से ही ऐसा कर सकते हैं, एक पैनल या कुछ में लोड उसके जैसा। यदि आप किसी सामग्री स्क्रिप्ट में हैं तो आपको पहले एक्सटेंशन में एक संदेश भेजना होगा और फिर उसे टैब में कार्यकर्ता को संदेश भेजना होगा।

+0

इस बग रिपोर्ट के अनुसार https://bugzilla.mozilla.org/show_bug.cgi सक्रिय टैब के साथ एक कार्यकर्ता के टैब की तुलना करना सही कार्यकर्ता को खोजने के लिए पर्याप्त नहीं है क्योंकि टैब अभी भी अपने इतिहास में कई पुराने श्रमिकों को पकड़ सकता है। – baseten

+0

समाधान यहां प्रतीत होता है: http://stackoverflow.com/questions/15502043/addon-sdk-context-menu-and-page-mod-workers – baseten

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