1

コンテンツスクリプトを使用してChromeでメッセージパッシングがどのように機能するかについて少し疑問があります。クロムのドキュメントに記載されているメッセージパッシングのデフォルトの例(http://src.chromium.org/viewvc/chrome/trunk/src/chrome/common/extensions/docs/examples/api/messaging/timer/ )を次のように変更しました。以下に見えるもの:

popup.html

function testRequest() {

  chrome.tabs.getSelected(null, function(tab) {
    chrome.tabs.sendRequest(tab.id, {counter: "getHTML"}, function handler(response) {
      alert("Inside Client = "+response.counter2);
    });
  });
}

私のコンテンツスクリプトは次のようになります:

page.js

chrome.extension.onRequest.addListener(
  function(request, sender, sendResponse) {
    alert(request.counter);
    alert("Inside server .. Req Counter = "+request.counter);
    sendResponse({counter2: "5"});
  });

popup.htmlからtestRequestを実行すると、コンテンツスクリプトが期待どおりに呼び出されます。宣言した両方のアラートをそれぞれの値で取得します。しかし、私のpopup.html応答コードは呼び出されていないようです..popup.html内にあるアラートはalert("Inside Client = "+response.counter2);実行されていません。

一方、クライアント内にデバッグポイントがある場合、それは機能します!ちょっと奇妙な..誰かがこれがどのようにそしてなぜ起こっているのか教えてもらえますか?

前もって感謝します..

4

2 に答える 2

1

あなたのコードは正しいです。私は前に言ったことを間違えています。

私が言うとき、私はなぜそれがうまくいかなかったのか戸惑いました。chrome://extensions/ ページでブラウザ アクションを実行していることが判明しました。Chrome 拡張機能では、API を使用してそのページにリクエストを実行したり送信したりすることはできません。Google.com などの通常のページで実行すると、ポップアップが表示されます。

ポップアップ ページ内にアラート ダイアログを表示することはできません。

そのため、次のものが表示されません。 alert("Inside Client = "+response.counter2); }

動作を確認したい場合は、コンソール ロガーを追加して、Web インスペクター内で表示できます。アラートを次のように置き換えます。 console.log(response.counter2);

于 2010-08-17T01:51:06.933 に答える
0

私が知る限り、ポップアップからのアラートは、ポップアップが開いている場合にのみ表示されます。

デバッガーがポップアップを開いたままにするため、ポップアップをデバッグしているときにアラートが表示されます。

バックグラウンド ページからアラートを作成することにも問題はないと確信しています。

于 2010-08-31T21:57:50.030 に答える