我目前正在使用Firefox添加sdk的Firefox扩展,我试图在内容脚本(页面mod)和弹出(面板)之间进行通信,但无济于事。
我正在使用Erik Vold的工具栏按钮。下面是我的代码:
var tbb = require('toolbarbutton').ToolbarButton({
id: 'from-us_button',
label: 'from-us',
image: data.url('img/on.png'),
panel: panel
});
var pageMod = require('page-mod').PageMod({
include: "*",
contentScriptFile: [
data.url('recuperation.js')
],
contentScriptWhen : "end",
attachTo: ["existing", "top"]
});
var panel = require('panel').Panel({
width: 200,
height: 500,
contentURL: data.url('popup.html')
});
我的pop .html包含:
<script type="text/javascript" src="popup.js"></script>
我想通过一个变量从休养。js弹出窗口。js,我怎么能做到这一点?
在你的pop - up.js你应该有一个'add '全局对象,它允许你发送消息回main.js。在这里记录:
https://addons.mozilla.org/en-US/developers/docs/sdk/latest/modules/sdk/panel.html样式% 20信任% 20面板% 20内容
您需要将popup.js附加到面板:
var panel = require('panel').Panel({
...
contentURL: data.url('popup.html'),
contentScriptFile: require("self").data.url("popup.js") //or data.url() if you already have it set
});
通过<script>
标签加载的脚本缺少使用self.port
所需的权限。
然后添加一个监听器到你的页面mod worker
和中继消息到你的面板,像这样:
var panel = ...
...
require('page-mod').PageMod({
include: "*",
contentScriptFile: [
data.url('recuperation.js')
],
contentScriptWhen : "end",
attachTo: ["existing", "top"],
onAttach: function(worker){
worker.port.on("recuperation-to-panel",function(msg){
panel.port.emit("recuperation-to-panel",msg);
});
}
});
Then from recover .js:
self.port.emit("recuperation-to-panel",msg);
* edit:应该是worker.port.on
;不是pageMod.port.on
。对不起。