2012-02-01 12 views
5

मेरा एडन एक पॉपअप पैनल खोलता है (popup.html)।फ़ायरफ़ॉक्स एडन एसडीके के साथ एक विजेट पॉपअप पैनल को फिर से लोड कैसे करें?

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

जब पॉपअप पैनल दूसरी बार खोला जाता है तो मुझे इसकी सामग्रीURL (popup.html) को रिलायड करने की आवश्यकता होती है लेकिन मुझे ऐसा करने का तरीका मिल गया।

यह आसान लग सकता है लेकिन मेरे पास एड-ऑन एसडीके के साथ केवल थोड़ा सा अनुभव है।

किसी भी मदद की सराहना की जाएगी।

यह मेरा कोड है:

exports.main = function() { 
    data = require('self').data; 
    var tabs = require("tabs"); 

    var popupPanel = require("panel").Panel({ 
    width:550, 
    height:400, 
    contentURL: data.url("popup.html"), 
    contentScriptFile: [data.url("popup.js")],  
    contentScript: " "+ 
     "self.port.on('curTabMsg', function(curTabMsg) {" + 
     "main(curTabMsg['curTab']);" + 
     "});" 
    }); 


    require('widget').Widget({ 
    panel: popupPanel, 
    onClick: function() {  
     popupPanel.port.emit("curTabMsg",{'curTab': tabs.activeTab.url}); 
    } 
    }); 
}; 
+0

आप यह बताना चाहते हैं कि आप अपने राज्य को अपडेट करने के लिए संदेश भेजने के बजाय पैनल को फिर से लोड क्यों करना चाहते हैं। –

+0

बिल्कुल - टीआई पैनल के लिए सामग्री स्क्रिप्ट को कार्यान्वित करने के लिए सबसे आसान होगा जो किसी ईवेंट पर प्रतिक्रिया करता है और सामग्री को फिर से लोड करता है। – canuckistani

+0

मैंने उस दिशा के बारे में सोचा नहीं था। यह दिलचस्प लगता है और मैं इसे आज़मा दूंगा। अगर यह काम करता है तो मैं बाद में अपडेट करूंगा। – Roey

उत्तर

4

आईफ्रेम के एचटीएमएल को फिर से लोड करने के बाद मेरी समस्या नहीं थी। (मुझे अपनी कंटेंटस्क्रिप्ट को फिर से लोड करने की आवश्यकता है)

तो आखिरकार मैंने विजेट पर क्लिक किए जाने पर एक नया पैनल बनाने के लिए क्या किया था।

मैं lib करने के लिए एक नई फ़ाइल जोड़ा बुलाया myPanel.js

function getPanel(contentURL,contentScriptFile,contentScript){ 
    var popupPanel = require("panel").Panel({ 
      width:550, 
      height:400, 
      contentURL: contentURL, 
      contentScriptFile: contentScriptFile,  
      contentScript: contentScript 
     }); 
    return popupPanel; 
} 

exports.getPanel = getPanel; 

और मेरे main.js में:

exports.main = function() { 
    data = require('self').data; 
    var myPanel=require("myPanel"); 
    var tabs = require("tabs"); 

    let myWidget = require('widget').Widget({ 
     id: "SomeId", 
     label: "Some lable", 
     contentURL: data.url("some.png"), 
     onClick: function() { 
      var panel = myPanel.getPanel(data.url("popup.html"),[data.url("popup.js")], 
         "self.port.on('curTabMsg', function(curTabMsg) {" + 
          "main(curTabMsg['curTab']);" + 
         "});");   
      panel.show(); 
      panel.port.emit("curTabMsg",{'curTab': tabs.activeTab.url}); 
     } 
    }); 
}; 
+0

यदि आप पैनल का उपयोग कर रहे हैं तो आप संदेशों को उत्सर्जित करने और प्रतिक्रिया देने के लिए केवल जावास्क्रिप्ट फ़ाइल प्राप्त कर सकते हैं। फिर बस यह निर्धारित करने के लिए ईवेंट का उपयोग करें कि टैब कब बदलता है और पैनल को संदेश भेजता है। क्या ऐसा होगा? –

+0

वही बकवास यहाँ। चलती पृष्ठ ठीक काम करती है, लेकिन एक ही तरीके से सामग्रीस्क्रिप्ट को बदलना संभव नहीं है। मुझे लगता है कि इसे एक बग के रूप में चिह्नित किया जाना चाहिए। समाधान के लिए धन्यवाद! – msangel

-1

सलाह मैं व्लादिमिर पैलान्ट और canuckistani से मिल गया के आधार पर, मैं अपने contentURL एक iFrame साथ

<iframe id="mainFrame" name="mainFrame" src="" frameborder="0" height ="100%" width="100%"></iframe> 

तो सामग्री स्क्रिप्ट मैं सेट पर प्रतिस्थापित नए एचटीएमएल के साथ iFram src।

function reload(tabUrl) 
{ 
    document.getElementById("mainFrame").src=tabUrl; 
} 


var popupPanel = require("panel").Panel({ 
      width:550, 
      height:400, 
      contentURL: data.url("container.html"), 
      contentScriptFile: [data.url("popup.js")],  
      contentScript: " "+ 
      "self.port.on('curTabMsg', function(curTabMsg) {" + 
       "reload(curTabMsg['curTab']);" + 
      "});" 
     }); 
0

जहाँ तक वहाँ contentScript एक साथ स्विचिंग pageContent साथ का कोई रास्ता नहीं है के रूप में , मैं अन्य समाधान के साथ जाता हूं: मेरे सभी "पृष्ठ" केवल एक HTML फ़ाइल में अनुभाग हैं, और सभी अनुभाग छिपे हुए हैं (सीएसएस: {display: none;}) एक को छोड़कर। और बदली गई सामग्री के बजाय, मैं बस इसका एक और हिस्सा दिखाता हूं।

दोष यह है: सामग्रीस्क्रिप्ट सभी "पृष्ठों" के लिए समान है। लेकिन evrything ठीक काम करता है।

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