如何使用firefox addon sdk重新加载小部件弹出式面板?

Roe*_*oey 5 firefox-addon firefox-addon-sdk

我的插件打开一个弹出面板(popup.html).

当用户将当前选项卡更改为其他选项卡时,弹出式面板将被隐藏,直到用户再次单击插件图标.(同时插件仍然"生活"在后台).

当弹出面板打开时,第二次我需要它来RELOAD其contentURL(popup.html),但我确实找到了这样做的方法.

这可能看起来很简单,但我对附加SDK的经验很少.

任何帮助将不胜感激.

这是我的代码:

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}); 
    }
  });
};
Run Code Online (Sandbox Code Playgroud)

Roe*_*oey 4

重新加载 iframe 的 html 毕竟不是我的问题。(我还需要重新加载我的 contentScript)

所以我最终所做的是每次单击小部件时创建一个新面板。

我向库中添加了一个名为 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;
Run Code Online (Sandbox Code Playgroud)

在我的 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}); 
      }
    });
};
Run Code Online (Sandbox Code Playgroud)