如何将消息从内容脚本发送到面板?

时间:2013-07-26 16:47:56

标签: javascript google-chrome-extension messaging firefox-addon-sdk porting

我的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;
        } 
     });
    
  3. pm-content.js中的

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

    包含panel.jsscript标记:

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

    所以可以使用pm-content.js将邮件从panel.js发送到contentWindow.postMessagepanel.js使用window.addListener来接收消息(来自panel.jspm-content.js的示例代码是从chrome扩展代码中复制的,我不会更改它)?< / p>

    相反,如何将msg从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);
       }
    

    我运行代码并且我收到很多错误。我应该更改这些消息代码以及如何?谢谢。

1 个答案:

答案 0 :(得分:0)

  

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

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

  

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

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

Cross-Browser Extensions API?