5

Google Chrome拡張機能で、コンテンツスクリプトとポップアップページの間でメッセージを渡したい。また、これを行うためのシグナルがポップアップページからコンテンツスクリプトに送信されたときに、コンテンツスクリプトの関数を起動する必要があります。

メッセージに関するGoogleChrome拡張機能の開発者向けドキュメントのセクションには、メッセージを「コンテンツスクリプトから拡張機能ページに、またはその逆に」渡すことができると記載されています(http://code.google.com/chrome/extensions/messagingから引用)。 html

これは、コンテンツスクリプトとポップアップページの間でメッセージを送受信できることを意味しますか?私が見た使用法は、バックグラウンドページとコンテンツスクリプト間の通信のためです。

または、3ウェイメッセージパッシングルートを設定する必要がありますか?コンテンツスクリプト<->背景ページ<->ポップアップページ。この場合、バックグラウンドページ<->ポップアップページ間にメッセージを設定するにはどうすればよいですか?

また、ポップアップページからコンテンツスクリプトにシグナルを送信した後、コンテンツスクリプトで関数を起動するにはどうすればよいですか?これには、バックグラウンドスクリプトも存在する必要がありますか?

4

1 に答える 1

12

コンテンツ スクリプトは、バックグラウンド ページにのみメッセージを送信できます。コンテンツ スクリプトからポップアップにメッセージを送信する場合は、次の操作を行う必要があります。

  1. コンテンツ スクリプトからバックグラウンド ページにメッセージを送信します。

    chrome.runtime.sendMessage( ...message... , function() { /*response*/ });
    
  2. バックグラウンドでメッセージを受信します。

    chrome.runtime.onMessage.addListener(function(message, sender, sendResponse) { ... });
    
  3. メッセージをポップアップに渡します。ポップアップのグローバルwindowオブジェクトへの参照を取得するには、 を使用しますchrome.extension.getViews。注: 他のほとんどの chrome API とは異なり、このメソッドは同期的です。

    var popupWindows = chrome.extension.getViews({type:'popup'});
    if (popupWindows.length) { // A popup has been found
        // details is the object from the onMessage event (see 2)
        popupWindows[0].whatever(message, sendResponse);
    }
    
  4. ポップアップで、whateverメソッドを定義します。

    function whatever(message, sendResponse) {
        // Do something, for example, sending the message back
        sendResponse(message);
    }
    
  5. sendResponse(4) が呼び出されると、( details.sendResponse3 を参照) が呼び出されます。これは、今度はfunction() { /*response*/ }1 から呼び出します。

注: chrome.runtime.sendMessage/onMessageは Chrome 26 以降でのみサポートされています。古いブラウザーもサポートする場合に使用chrome.extension.sendMessageします。

于 2012-07-23T17:49:38.287 に答える