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?

相關問題