ホームページ >ウェブフロントエンド >jsチュートリアル >Chrome 拡張機能の孤立したスクリプトによって引き起こされる通信の問題を解決するにはどうすればよいですか?

Chrome 拡張機能の孤立したスクリプトによって引き起こされる通信の問題を解決するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-01 00:22:29228ブラウズ

How Do I Fix Communication Issues Caused by Orphaned Scripts in Chrome Extensions?

Chrome 拡張機能の孤立したスクリプトのトラブルシューティング

Chrome 拡張機能を誤ってリロードした後に回復すると、孤立したスクリプトが発生し、コンテンツ間の通信の問題が発生する可能性がありますスクリプトと拡張機能の他の部分。孤立したスクリプトを削除し、適切な機能を復元する解決策は次のとおりです。

孤立したスクリプトを強制終了する

孤立したコンテンツ スクリプトは、引き続き DOM メッセージを受信できます。ウィンドウ オブジェクトを介して、新しい作業コンテンツ スクリプトからゴースト化されたコンテンツ スクリプトにメッセージを送信します。メッセージを受信したら、孤立したスクリプトは次のことを行う必要があります。

  • すべてのイベント リスナーの登録を解除し (グローバル変数を無効にし)、自身をガベージ コレクションの対象にします。
  • コンテンツ内。 js:

    <code class="javascript">var orphanMessageId = chrome.runtime.id + 'orphanCheck';
    window.dispatchEvent(new Event(orphanMessageId));
    window.addEventListener(orphanMessageId, unregisterOrphan);
    
    // ... Register event listeners with named functions to preserve their references
    
    function unregisterOrphan() {
    // ... Unregister listeners and remove global variables
    }</code>

コンテンツ スクリプト インジェクションの確保

孤立したスクリプトにメッセージが送信されるのを防ぐために、popup.js は、メッセージを送信する前にライブ コンテンツ スクリプトが実行されています:

<code class="javascript">async function sendMessage(data) {
  const [tab] = await chrome.tabs.query({ active: true, currentWindow: true });
  if (await ensureContentScript(tab.id)) {
    return await chrome.tabs.sendMessage(tab.id, data);
  }
}

async function ensureContentScript(tabId) {
  // ... Check if content script is running and inject it if not
}</code>

これらの対策を実装することで、孤立したスクリプトを効果的に削除し、通信の問題を防ぎ、Chrome 拡張機能の機能を復元できます。

以上がChrome 拡張機能の孤立したスクリプトによって引き起こされる通信の問題を解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。