バックグラウンド スクリプトからコンテンツ スクリプト、さらに挿入されたスクリプトにメッセージを送信するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-10-18 12:04:26
オリジナル
263 人が閲覧しました

How to Send Messages from a Background Script to a Content Script and then to an Injected Script?

バックグラウンド スクリプトからコンテンツ スクリプト、さらに挿入されたスクリプトへのメッセージの送信

問題ステートメント

タスク当面の目的は、バックグラウンド スクリプトとコンテンツ スクリプトの間に通信チャネルを確立することです。コンテンツ スクリプトは Web ページに別のスクリプトを挿入する役割を果たし、挿入されたスクリプトがメッセージの受信者になります。ただし、この通信、特にバックグラウンド スクリプトからコンテンツ スクリプトへの最初のメッセージ送信は失敗していることが判明しています。

問題の理解

問題の根本は以下にあります。コンテンツ スクリプト インジェクションの性質。 Chrome は、拡張機能の読み込みまたは再読み込み時に、コンテンツ スクリプトを既存のタブに自動的に挿入しません。代わりに、挿入は、後続のタブ ナビゲーション、または指定された URL パターンに一致する新しいタブを開いたときにのみ発生します。

解決策

解決策 1: コンテンツ スクリプトの準備を確認する

<code class="js">// Background
function ensureSendMessage(tabId, message, callback){
  chrome.tabs.sendMessage(tabId, {ping: true}, function(response){
    if(response &amp;&amp; response.pong) { // Content script ready
      chrome.tabs.sendMessage(tabId, message, callback);
    } else { // No listener on the other end
      chrome.tabs.executeScript(tabId, {file: "content_script.js"}, function(){
        if(chrome.runtime.lastError) { console.error(chrome.runtime.lastError); }
        else { chrome.tabs.sendMessage(tabId, message, callback); }
      });
    }
  });
}

// Content script
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
  if(request.ping) { sendResponse({pong: true}); return; }
  /* Content script action */
});</code>
ログイン後にコピー

解決策 2: ランタイム チェックを使用して常にスクリプトを注入する

<code class="js">// Background
function ensureSendMessage(tabId, message, callback){
  chrome.tabs.executeScript(tabId, {file: "content_script.js"}, function(){
    if(chrome.runtime.lastError) { console.error(chrome.runtime.lastError); }
    else { chrome.tabs.sendMessage(tabId, message, callback); }
  });
}

// Content script
var injected;

if(!injected){
  injected = true;
  /* your toplevel code */
}</code>
ログイン後にコピー

解決策 3: 初期化時に無差別に注入する

<code class="js">chrome.tabs.query({}, function(tabs) {
  for(var i in tabs) { chrome.tabs.executeScript(tabs[i].id, {file: "content_script.js"}); }
}); </code>
ログイン後にコピー

以上がバックグラウンド スクリプトからコンテンツ スクリプト、さらに挿入されたスクリプトにメッセージを送信するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート