Javascript 内容脚本(页面修改)和弹出窗口(面板)之间的通信
我目前正在使用Firefox插件sdk进行Firefox扩展,我尝试在内容脚本(页面修改)和弹出窗口(面板)之间进行通信,但没有成功 我用的是Erik Vold。这是我的密码:Javascript 内容脚本(页面修改)和弹出窗口(面板)之间的通信,javascript,firefox,firefox-addon-sdk,Javascript,Firefox,Firefox Addon Sdk,我目前正在使用Firefox插件sdk进行Firefox扩展,我尝试在内容脚本(页面修改)和弹出窗口(面板)之间进行通信,但没有成功 我用的是Erik Vold。这是我的密码: var tbb = require('toolbarbutton').ToolbarButton({ id: 'from-us_button', label: 'from-us', image: data.url('img/on.png'), panel: panel }); var
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')
});
My popup.html包含:
<script type="text/javascript" src="popup.js"></script>
我想将一个变量从recoverage.js传递到popup.js,我该怎么做?在popup.js中,您应该有一个“addon”全局对象,它允许您将消息发送回main.js。这里记录了这一点: 您需要将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
});
通过
标记加载的脚本缺少使用self.port
所需的特权
然后在页面modworker
中添加一个侦听器,并将消息转发到面板,如下所示:
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);
});
}
});
然后从recoverage.js:
*编辑:它应该是上的worker.port.on;不
pageMod.port.on
。抱歉。谢谢您的回复,但我有一个错误:“pageMod.port未定义”。@seb68:oops,它应该是worker.port.on
;不pageMod.port.on
。修好了,谢谢。我仍然有一个错误:“msg未定义”。在recoverage.js中,我有var msg=“hello”
@seb68:msg
接通worker.port.on
是否正常?当您将console.error(msg)
放入将消息传递到panel.js的事件处理程序中时,它会输出什么?如果我将contentScriptFile:[data.url('recoverage.js')、data.url('popup.js')]
放入工具栏按钮中,它会工作。谢谢。谢谢,如果我能投你10票,我会那样做的。我认为这些信息应该在文档中得到更多的强调,这很重要,但很容易被忽略。
self.port.emit("recuperation-to-panel",msg);