Javascript Firefox扩展一直在后台运行
我创建了一个Firefox扩展,在popup.html中有iframe。 为了在iframe和main.js之间传递消息,我使用postMessage方法 收到消息时,弹出窗口的行为异常。我使用console.log获取正在接收的消息。消息获取console.log,表示多次单击扩展的次数。 例如,如果我打开了扩展4次,iframe只传递消息一次,但消息接收4次 为了让您理解,我正在一步一步地编写过程: 打开一个选项卡,然后单击extension 消息从iframe传递到main.js,main.js在接收到消息后,console.js会记录相同的消息。现在此消息出现一次 单击任意位置关闭扩展。再次单击扩展>消息传递>控制台。将同一消息记录两次 重复这个过程,它会记录消息很多次,然后单击扩展名 这是Firefox的bug吗?还是我做错了什么? 编辑: 以下是my main.js中的一些片段:Javascript Firefox扩展一直在后台运行,javascript,firefox-addon,firefox-addon-sdk,Javascript,Firefox Addon,Firefox Addon Sdk,我创建了一个Firefox扩展,在popup.html中有iframe。 为了在iframe和main.js之间传递消息,我使用postMessage方法 收到消息时,弹出窗口的行为异常。我使用console.log获取正在接收的消息。消息获取console.log,表示多次单击扩展的次数。 例如,如果我打开了扩展4次,iframe只传递消息一次,但消息接收4次 为了让您理解,我正在一步一步地编写过程: 打开一个选项卡,然后单击extension 消息从iframe传递到main.js,main
if (self.port !== undefined){
self.port.on("show", function(a,b) {
myApp.initialize(a,b);
});
}
var myApp = {
initialize: function (a,b){
window.addEventListener ("message" , receiveMessage, false);
function receiveMessage(event){
console.log("event.data - - - - - - ",event.data);
}
},
goAbc : function(){
self.port.emit("close");
}
}
iframe中的代码是:
$(document).ready(function(){
parent.postMessage("getData", "*");
});
编辑:还有一个问题:
如果我在代码中的某个地方调用myApp.goAbc,它会说self.port未定义。这里有什么问题?我是否应该使用其他东西来代替self.port?每次放映时,您都会调用myApp.initialize,这会为EventListener添加一个新的事件侦听器。所以第一次,有一个,下一次会有另一个,额外的一个,你再次调用addEventListener,总共两个,以此类推
相反,您需要准确地调用addEventListener一次,而不是每次都调用一次。请发布一个示例代码。@nMail:我已经用代码更新了问题。请看一看提出新问题,不要使用“编辑补充”功能。尽管如此,如果你想得到好的答案或答案,那么你必须发布一个完整的、可复制的例子。猜测你的窗口和/或自我从何而来毫无意义。@N迈尔:好的。当然我对SO的提问几乎是新手,所以我对如何发布问题并不太在行嘿,谢谢。我还有一个问题,因此我再次编辑这个问题。帮帮我,我也是。谢谢: