如何从firefox插件中的面板触发面板?

时间:2017-05-31 23:15:41

标签: javascript javascript-events firefox-addon firefox-addon-sdk

我有这样的结构:

Addon Directory
    index.js
    Data Directory
       -panel1.html
       -panel1.js
       -panel2.html
       -panel2.js

我在panel1中定义了panel2index.js。我将panel1附加到工具栏按钮。 panel1.html包含一个应该打开panel2.html的链接。

问题是: 当我在panel2.show()内拨打panel1.js时,我收到此错误:panel2.show is not a function 这是代码:

var geLink= document.getElementById("mylink");
getLink.addEventListener('click', function (event)
            {
               console.log("link clicked");
                panel2.show();
                },false);

如何从panel1触发panel2?这有可能吗?

我知道无法从主插件脚本外部调用show方法。那么,当点击panel2.html中的链接时,显示panel1并执行其内容脚本的正确方法是什么?是使用window.open()使用? 如果是这种情况,如何在panel2窗口打开之前告诉panel2.html脚本不执行?因为当我尝试它时,panel2脚本会在我点击panel1中的链接之前和panel2.html页面打开之前执行。

1 个答案:

答案 0 :(得分:0)

无法从第一个面板触发第二个面板。不可能同时有两个面板。

  

打开面板将关闭Panel创建的任何面板()   已经打开的构造函数,即使该面板是由a打开的   不同的基于附加SDK的扩展。

但是,您可以触发包含内容脚本的普通HTML页面,而不是面板。在索引中创建pageMod对象:

var pageMod = require('sdk/page-mod').PageMod({
  include: "resource://extensionfile/data/page.html",
  contentScriptFile:'./myscript.js',
  contentScriptWhen: 'ready',
  onAttach: function(worker) {
    worker.port.emit("going-from-index", myarray);
    worker.port.on("coming-from-panel", receivedvalue); }
});//end var pageMod

在面板中,听取链接点击,然后打开html页面:

link = document.getElementById("click-link");
link.addEventListener('click',function (event)
                                    {
                                      window.open('page.html');
                                    }
                            );