Firefox扩展一直在后台运行
Firefox Extension keeps running in background
我创建了一个Firefox扩展,它在popup.html中有iframe。
为了在iframe和main.js之间传递消息,我使用了postMessage方法。
接收消息时弹出窗口行为怪异。我使用console.log来获取正在接收的消息。消息得到console.log,表示多次单击扩展的次数。例如,如果我打开扩展4次,iframe只传递消息一次,但消息被接收了4次。
为了让你明白我正在一步步地写:
-
打开选项卡,点击扩展
-
消息从iframe传递到main.js, main.js接收到消息后,控制台。记录相同的消息。
-
单击任意位置关闭扩展。再次单击扩展>消息传递>控制台。
重复此过程,并且它记录消息的次数,扩展被点击。
这是Firefox的bug吗?还是我做错了什么?
编辑:下面是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。端口未定义。这里的问题是什么?我应该用别的东西来代替self。port吗?
对于每个"show"
,您调用myApp.initialize
,其中addEventListener
为新的事件侦听器。因此,第一次有一个,下一次将有另一个,额外的一个(当您再次调用addEventListener
时),总共两个,依此类推。
相反,您需要只调用一次addEventListener
,而不是每个"show"
。
相关文章:
- jquery,while循环在后台运行,同时while循环
- 在后台运行的脚本在出现弹出窗口时会停止
- 在页面加载/刷新时在后台运行扩展
- Jquery Ajax在后台运行的多个页面上发布数据
- 如何在JavaScript中创建一个等待函数,允许您在后台运行音频等内容
- 如果我隐藏引导轮播,它是否仍在后台运行
- 在后台运行循环
- 如何通过在后台运行安装程序或脚本来安装 NPAPI 插件
- 在后台运行代码,同时显示警报
- fb.login 在后台运行对话框
- Ajax 单击按钮在后台运行表单
- 如何插入在后台运行的慢速 ajax 请求
- 科尔多瓦应用程序在后台运行一段时间后退出
- 如何在后台运行巨大的处理
- 如何在Phonegap应用程序中创建一个简单的服务,以便在后台运行setInterval()
- 如何在后台运行javascript
- 如何在后台运行android phonegap应用程序(关闭应用程序后)
- 在后台运行chrome扩展的HTML页面
- 隐藏的内容仍在后台运行
- 如何使定时器也可以在后台运行