Firefox扩展一直在后台运行

Firefox Extension keeps running in background

本文关键字:后台 运行 一直 扩展 Firefox      更新时间:2023-09-26

我创建了一个Firefox扩展,它在popup.html中有iframe。
为了在iframe和main.js之间传递消息,我使用了postMessage方法。

接收消息时弹出窗口行为怪异。我使用console.log来获取正在接收的消息。消息得到console.log,表示多次单击扩展的次数。例如,如果我打开扩展4次,iframe只传递消息一次,但消息被接收了4次。

为了让你明白我正在一步步地写:

  1. 打开选项卡,点击扩展

  2. 消息从iframe传递到main.js, main.js接收到消息后,控制台。记录相同的消息。

  3. 单击任意位置关闭扩展。再次单击扩展>消息传递>控制台。

重复此过程,并且它记录消息的次数,扩展被点击。

这是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"