1

我在我的 firefox 插件中的 main.js、page-mod 的内容脚本和面板的内容脚本之间的消息传递出现了一些问题。我将 chrome 扩展代码转移到了 firefox 插件。

  1. 这些js文件加载的顺序是什么?我尝试用控制台弄清楚,但日志已刷新。

  2. 我已经将特定于 chrome 的 API 转移到了 firefox 插件 API,但我不确定其他本机消息 js 代码是否应该更改。现在,我将向您展示示例。在main.js

    var pmworker = []
    var pagemod = PageMod({
       include: ['*'],
       contentScriptWhen: 'start',
       contentScriptFile: [data.url('pm-content.js')],
       onAttach: function(worker) {
           worker.port.on('message',
           function(data) {
                switch (data.type) {
                case 'some type':
                   do something;
                   break;
                }
            });
            worker.on('detach',function() {
               detachWorker(this, pmworker);
            });
            pmworker.push(worker);
        }
    });   
    
    
    var panel = require("sdk/panel").Panel({
      width: 322,
      height: 427,
      contentURL: data.url("panel.html"),
      include:["http://*/*","https://*/*"]
    });   
    
    panel.on('message', function(messagedata) {
        switch(messagedata.type) {
          case 'some type':
            panel.port.emit("something");
            break;
        } 
     });
    

pm-content.js

var sendInfoToFrame = function(){
    var frameWindow = document.getElementById(iframeId).contentWindow;
    var infoMsg = {type:"some type",content:something};
    frameWindow.postMessage(infoMsg, "*");
}

panel.html's中head包含一个panel.jswithscript标签:

function addParentListener(){
    window.addEventListener("message",function (e) {
        var message=e.data;
        if(message.type="some type"){
            //do something
        }
    },false);
}

所以消息可以从 to 发送pm-content.jspanel.jswithcontentWindow.postMessage吗?以及panel.js用于window.addListener接收味精(这些示例代码是从 chrome 扩展代码复制而来panel.jspm-content.js我没有更改)?

相反,消息是如何从panel.js内容脚本发送的?我也从 chrome 复制相同的代码,但我不知道它是否正确。示例代码是:在 panel.js 中:

function sendSomeMessage(value){
    var message = {type : "sometp",value: value};
    window.parent.postMessage(message, "*");
}

和接收代码pm-content.js

   function addMessageListener() {
    window.addEventListener("message",function(e) {
            var message = e.data;
            if (message.type == null) {
                    return;
            }
            var msgType = message.type;
            switch (msgType) {
            case "sometp":
                    //do something
            }
    }, false);
   }

我运行代码时遇到很多错误。那么我应该更改这些消息传递代码吗?如何更改?谢谢你。

4

1 回答 1

0

这些js文件加载的顺序是什么?我尝试用控制台弄清楚,但日志已刷新。

使用网络面板而不是控制台

我已将特定于 chrome 的 API 转移到 firefox 插件 API,但我不确定其他本机消息 js 代码是否应该更改。现在,我将向您展示示例。在 main.js 中:

使用或分析现有工具,如在类似问题中:

跨浏览器扩展 API?

于 2013-12-23T21:56:57.387 回答