Firefox Extension继续在后台运行

时间:2014-06-06 13:45:10

标签: javascript firefox-addon firefox-addon-sdk

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

接收消息时,弹出窗口表现得很奇怪。我使用console.log来获取正在接收的消息。该消息多次获取console.log,单击时间扩展名。 对于例如如果我打开了4次分机,iframe只传递一次消息,但消息会被接收4次。

让您理解我一步一步的写作过程:

  1. 打开标签页,然后点击扩展程序。

  2. 消息从iframe传递到main.js,在收到消息后,console.logs会显示相同的消息。现在此消息出现一次。

  3. 点击任意位置关闭扩展程序。再次点击扩展程序>消息传递> console.logs两次相同的消息。

  4. 重复此过程,并多次记录消息,点击扩展名。

    这是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吗?

1 个答案:

答案 0 :(得分:0)

对于每个"show",您调用myApp.initializeaddEventListener新的事件监听器。所以第一次有一个,下一次会有另一个,另外一个(当你再次呼叫addEventListener时)总共两个,依此类推。

相反,您需要恰好拨打addEventListener一次,而不是每个"show"