2017-12-30 67 views
0

バックグラウンドページからパネルにメッセージを渡すことはありません。たくさんの例や文書がありますが、イベントからはうまくいかないようです。Chrome devtoolsの拡張背景ページからパネル

ここにバックグラウンドページのリスナーがあります。

chrome.extension.onConnect.addListener(function (port) { 
 
    
 
    var extensionListener = function (message, sender, sendResponse) { 
 

 
     if(message.tabId && message.content) { 
 

 
       //Evaluate script in inspectedPage 
 
       if(message.action === 'code') { 
 
        chrome.tabs.executeScript(message.tabId, {code: message.content}); 
 

 
       //Attach script to inspectedPage 
 
       } else if(message.action === 'script') { 
 
        chrome.tabs.executeScript(message.tabId, {file: message.content}); 
 

 
       //Pass message to inspectedPage 
 
       } else { 
 
        chrome.tabs.sendMessage(message.tabId, message, sendResponse); 
 
       } 
 

 
     // This accepts messages from the inspectedPage and 
 
     // sends them to the panel 
 
     } else { 
 
      port.postMessage(message); 
 
     } 
 
     sendResponse(message); 
 
    } 
 

 
    // Listens to messages sent from the panel 
 
    chrome.extension.onMessage.addListener(extensionListener); 
 

 
    port.onDisconnect.addListener(function(port) { 
 
     chrome.extension.onMessage.removeListener(extensionListener); 
 
    }); 
 

 
});

このコードは、すべての "教科書" の例では正常に動作します。しかし、この文脈では、メッセージを送信し、イベントリスナーはそれを受け取らない。

chrome.tabs.onUpdated.addListener(function (tabId, changes, tabObject) { 
 
    if(changes.status && changes.status === "complete") { 
 
     if(tabObject.url) { 
 
      var command = 'console.log("url is ' + tabObject.url + '");'; 
 
      chrome.tabs.executeScript(tabId, {code: command}); 
 

 
      //** Trying to trigger message in background, which will pass message to panel.html */ 
 
      // THIS DOES NOT WORK!!! // 
 
      var message = {content: "hello console"}; 
 
      chrome.extension.sendMessage(message); 
 
     } 
 
    }  
 
    });

誰も私が間違ってやっているものを見るかのメッセージがonUpdatedイベント内でピックアップされていない理由を知っていることはできますか?

これは、パネル内でトリガーされるコードです。他のシナリオでも機能します。

(function createChannel() { 
 
    //Create a port with background page for continous message communication 
 
    var port = chrome.extension.connect({ 
 
     name: "Channel between inspected page" //Given a Name 
 
    }); 
 

 
    // Listen to messages from the background page 
 
    port.onMessage.addListener(function (message) { 
 

 
     document.getElementById("textareaconsole").value = message.content; 
 
    }); 
 

 
}());

あなたは好奇心旺盛であれば、私はそれが特定のドメインでない場合はデベロッパーツールの拡張機能を無効にしようとしています。ありがとうございました。

+0

のおかげで、ありがとうございます。バックグラウンドからパネルにデータを送信しようとしています。 –

+1

次に、ポートを使用します。 – wOxxOm

+0

ありがとう!それが修正だった。ポートがアクセス可能なOnConnectにコードを移動すると、コードは機能します。 –

答えて

0

解決方法は、イベントコードを渡されたポートを参照できるchrome.extension.onConnect.addListenerイベントに移動することでした。

chrome.extension.onConnect.addListener(function (port) { 
 
... 
 
    chrome.tabs.onUpdated.addListener(function (tabId, changes, tabObject) { 
 
     if(changes.status && changes.status === "complete") { 
 
      if(tabObject.url) { 
 
       var command = 'console.log("url is ' + tabObject.url + '");'; 
 
       chrome.tabs.executeScript(tabId, {code: command}); 
 

 
       // This passes the message from the background page to the panel!!! // 
 
       var message = {content: "hello console"}; 
 
       port.postMessage(message); 
 
      } 
 
     } 
 
    });

woxxom

関連する問題