2016-05-16 63 views
0

当我点击我的开发/面板界面中的按钮时,我需要调用高级API函数。我这样实现它。 当addon处于onReady状态时,addon将postMessage发送到panelSide。firefox插件和开发/面板之间的通信

// index.js 
onReady: function() { 
    // in this function you can communicate 
    // with the panel document 
    this.postMessage("add-on-ready", [panelSide]); 
    //this.postMessage("add-on-ready2", [panelSide]); // This message may be received in logic-panel.js 
} 

主机将在textarea的添加所接收的消息和只需按某个按钮回复插件:

//logic-panel.js 
window.addEventListener("message", function(event) { 
    var toAddon = event.ports[0]; 
    toAddon.start(); 

    $(document).ready(function(){ 
     $('#log').append(event.data + '\n'); 
    }); 

    switch(event.data){ 
     case "add-on-ready": 
      $(document).ready(function(){ 
       $("#inspect").click(function(){ 
        toAddon.postMessage("inspect"); 
       }); 
       $("#exit").click(function(){ 
        toAddon.postMessage("exit"); 
       }); 

      }); 
      break; 

     default: 
      toAddon.postMessage("event.data = " + event.data); 
      alert("event.data = " + event.data); 
    } 
}); 

附加组件处理响应。如果按钮“考察”被按下,然后将参与高层次的API(即PageMod在handleClick功能):

//index.js 
addonSide.onmessage = function(event) { 
    console.log(event.data); 
    switch(event.data){ 
     case "inspect": 
      console.log("run inspect"); 
      handleClick(); 
      console.log("run inspect end"); 
      break; 

     case "exit": 
      console.log("push exit =("); 
      break; 

     default: 
      MyPanel.postMessage("add-on-ready", [panelSide]);  //not work 
    } 
} 


function handleClick() { 
    console.log("xpath"); 
    var data = require("sdk/self").data; 

    var pageMod = require('sdk/page-mod').PageMod({ 
     include: ['*'], 
     contentScriptFile: data.url("./addonside/xpath.js"), 
     onAttach: function(worker) { 
      worker.on('message', function(message) { 
       console.log('mouseclick: ' + message); 
       //////////////////////////////// 
       // this.postMessage('mouseclick: ' + message, [panelSide]); // This message not may be received in logic-panel.js 
       //////////////////////////////// 
      }); 
     } 
    }); 
} 

问:我如何发送的postMessage到面板handleClick()函数?也许有更合适的方式使用dev/panel调用高级API?

回答

0

在index.js声明var _MyPanel;

onReady

onReady: function() { 
    _MyPanel = this; 
    _MyPanel.postMessage("add-on-ready", [panelSide]); 
} 

而且handleClick()

function handleClick() { 
    console.log("xpath"); 

    var data = require("sdk/self").data; 

    var pageMod = require('sdk/page-mod').PageMod({ 
     include: ['*'], 
     contentScriptFile: data.url("./addonside/xpath.js"), 
     onAttach: function(worker) { 
      worker.on('message', function(message) { 
       console.log('mouseclick: ' + message); 
       _MyPanel.postMessage("mouseclick: " + message, [panelSide]); 
      }); 
     } 
    }); 
}