我创建了一个Firefox扩展,在popup.html中有iframe 要在iframe和main.js之间传递消息,我使用postMessage方法。
接收消息时,弹出窗口表现得很奇怪。我使用console.log来获取正在接收的消息。该消息多次获取console.log,单击时间扩展名。 对于例如如果我打开了4次分机,iframe只传递一次消息,但消息会被接收4次。
让您理解我一步一步的写作过程:
打开标签页,然后点击扩展程序。
消息从iframe传递到main.js,在收到消息后,console.logs会显示相同的消息。现在此消息出现一次。
点击任意位置关闭扩展程序。再次点击扩展程序>消息传递> console.logs两次相同的消息。
重复此过程,并多次记录消息,点击扩展名。
这是Firefox的错误吗?或者我做错了什么? 编辑: 这是我的main.js的一些片段:
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吗?
答案 0 :(得分:0)
对于每个"show"
,您调用myApp.initialize
,addEventListener
新的事件监听器。所以第一次有一个,下一次会有另一个,另外一个(当你再次呼叫addEventListener
时)总共两个,依此类推。
相反,您需要恰好拨打addEventListener
一次,而不是每个"show"
。