我有一个Chrome插件,我想移植到Firefox。这个插件有一个复杂的UI,占用整个页面,打算长时间打开和使用,以及在浏览器中打开的其他页面。在chrome我只打开“.html”插件接口文件,它可以访问所有插件api:与插件脚本等通信。但是如果我在firefox插件中打开“.html”文件:
var root = data.url('icon.png').split('/').slice(0, -2).join('/');
widget.Widget({
id: 'my-addon',
label: 'my addon',
contentURL: data.url('icon.png'),
onClick: function() {
tabs.open([root, 'lib', 'control.html'].join('/'));
}
});
似乎页面内的javascript代码无法访问this.port
对象进行通信。创建整页插件界面的正确方法是什么?我是否需要通过contentScriptFile
分开注入javascript代码(非常糟糕,因为这在chrome中是完全不可能的,我将无法对两个插件使用相同的代码)或使用某种特殊类型的{{1}那么它会全屏吗?
答案 0 :(得分:1)
您可以在选项卡中打开html页面,然后使用tab.attach
附加实际脚本。这样,您的脚本将成为可访问内容脚本API的实际内容脚本。
widget.Widget({
id: 'my-addon',
label: 'my addon',
contentURL: data.url('icon.png'),
onClick: function() {
tabs.open({
url: data.url("control.html"),
onOpen: function(tab) {
tab.attach({
contentScriptFile: [data.url("control.js")],
onMessage: function() {}
});
}
});
}
});
它很难看,但它应该可以工作(总的来说,我并没有真正尝试过示例代码)。