1

我的firefox插件中的main.js,page-mod的内容脚本和面板的内容脚本之间的消息传递存在一些问题。我将Chrome扩展代码传递给firefox插件。如何从内容脚本向面板发送消息?

  1. 加载这些js文件的顺序是什么?我试图用控制台计算出 ,但日志已刷新。

  2. 我已经将Chrome特定的API传递给firefox addon 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.htmlhead

包括panel.jsscript标签:

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

所以该消息可以b e从pm-content.js发送到panel.jscontentWindow.postMessage?而panel.js使用window.addListener来接收味精(这些示例代码从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); 
    } 

我运行代码,我得到很多errors.So的我应该改变这些消息传递代码和如何?谢谢。

回答

0

加载这些js文件的顺序是什么?我试图找出与控制台,但日志刷新。

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

我有Chrome的特定API转移到Firefox的插件API,但是我不能肯定其他本地消息js代码应该change.Now,我将向你展示这个例子。在main.js:

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

Cross-Browser Extensions API?

相关问题