0

私のコードでは、現在、バックグラウンドスクリプトにメッセージを送信するコンテンツスクリプトがあり、それに応じてアラートが生成されます。 https://www.google.comにアクセスすると、example.jsbackground.jsの場合に有効です。しかし、popup.jsと私のコンテンツスクリプトの間の通信を確立しようとしたとき、私はエラーメッセージコンテンツスクリプトはバックグラウンドスクリプトに接続できますが、popup.jsはコンテンツスクリプトに接続できません

Could not establish connection. Receiving end does not exist. 

を取得する私は、現在持っていることは、ポップアップ上のボタンがクリックされると、私はpopup.jsからのメッセージを送っています。それから、コンテンツ・スクリプトexample.jsからコンソール・メッセージを表示する必要がありますが、コンテンツ・スクリプトのリスナーに到達していないように見えます。

window.onload=function(){ 
    document.getElementById('highlight').addEventListener('click', sendHighlightMessage, false); 
} 

function sendHighlightMessage() { 
    chrome.tabs.query({active: true, currentWindow: true}, function(tabs) { 
    console.log("going through tabs " + tabs[0].url); //this actually occurs 

     chrome.tabs.sendMessage(tabs[0].id, {highlight: true}, function(response) { 
     if (chrome.runtime.lastError) { 
      // An error occurred :(
      console.log("ERROR: ", chrome.runtime.lastError); 
     } 
     else{ 
      console.log(response.message); 
     } 
     }); 
    }); 
} 

example.js:

chrome.runtime.sendMessage('Hello World'); 
chrome.tabs.onMessage.addListener(function(response, sender, sendResponse){ 
    console.log("received " + response); //never gets to this point 
    sendResponse({message : "Response Received"}); 
}); 

background.js:ここでのコードは、

popup.jsだ

chrome.runtime.onMessage.addListener(function(response, sender, sendResponse){ 
    alert(response); 
}); 
chrome.tabs.onMessage.addListener(function(response, sender, sendResponse){ 
console.log("received " + response); 
sendResponse({message : "Response Received"}); 
}); 

私は答えの多くを試してみたが、これまでに働いた人はいません。

+0

「見た目にも届かない」と思われますが、「見える」とはどういう意味ですか?何が起こるかを正確に知るために、devtoolsにデバッガがあります。コンテンツスクリプトリスナー(devtools - ソースパネル - コンテンツスクリプト)にブレークポイントを設定し、ポップアップのためにdevtoolsを開き、コードをステップ実行するか、ブレークポイントを設定します。これは1分以上かかりません。 – wOxxOm

答えて

-3

ポップアップスクリプトは、コンテンツスクリプトと直接通信できないように設計されているため、これを達成するためにバックグラウンドスクリプトを通じてメッセージを送信する必要があります。

ポップアップで最初にバックグラウンドページにメッセージを送信し、バックグラウンドページで特定のコンテンツスクリプトに別のメッセージを送信させます。あなたのコンテンツスクリプトは、バックグラウンドページからイベントを聞きます。

+0

返信いただきありがとうございます。基本的に同じリスナーを 'background.js'に追加してみました(明快にするために編集をチェックします)が、バックグラウンドスクリプトと' popupの間の接続を得ることができません。 jsのどちらかです。 –

+1

'Popupsスクリプトは、コンテンツスクリプトと直接対話できないように設計されています.'これは真実ではありません。ポップアップスクリプトは、**が表示されたときに直接コンテンツスクリプトと通信できます**。 – wOxxOm

関連する問題