我目前正在使用Firefox添加sdk进行Firefox扩展,我尝试在内容脚本(页面模式)和弹出窗口(面板)之间进行通信,但无济于事。
我正在使用Erik Vold的toolbar button。这是我的代码:
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')
});
我的popup.html包含:
<script type="text/javascript" src="popup.js"></script>
我想将recuperation.js中的变量传递给popup.js,我怎么能这样做?
答案 0 :(得分:2)
在你的popup.js中你应该有一个'addon'全局对象,它允许你将消息发送回main.js.这在此处记录:
答案 1 :(得分:1)
您需要将 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
的必要权限。
然后为你的page-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);
});
}
});
然后从 recuperation.js :
self.port.emit("recuperation-to-panel",msg);
*编辑:应为worker.port.on
;不是pageMod.port.on
。遗憾。