2016-05-16 3 views
0

dev/panelインターフェイスのボタンをクリックすると、高水準のAPI関数を呼び出す必要があります。私はこのように実装しました。 アドオンがonReady状態になると、addonはpostMessageをpanelSideに送信します。firefox addonとdev/panelの間の通信

// 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 
} 

パネルは、テキストエリアに受信したメッセージを追加し、単に特定のボタンを押すことによって、アドオンを返信:

//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); 
    } 
}); 

アドオンは、応答を処理します。

//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 
       //////////////////////////////// 
      }); 
     } 
    }); 
} 

Q:はどのように私はhandleClickにパネルにのpostMessageを送信することができます()関数の「点検」ボタンが押された場合には、(すなわち、PageMod handleClick機能における)高レベルAPIを関与されるのですか?おそらく、dev/panelを使ってハイレベルAPIを呼び出すより適切な方法がありますか?

index.jsで

答えて

0

onReadyvar _MyPanel;

を宣言:

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]); 
      }); 
     } 
    }); 
}