我有这样的结构:
Addon Directory
index.js
Data Directory
-panel1.html
-panel1.js
-panel2.html
-panel2.js
我在panel1
中定义了panel2
和index.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
页面打开之前执行。
答案 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');
}
);