1

バックグラウンド ページから複数のコンテンツ スクリプトとの通信に問題があります。私の背景ページには次のようなコードがあります:

chrome.tabs.sendRequest(tabId, { targetScript:"content1" }, function (resp) {
  if (resp.fromCorrectScript) {
    DoMoreStuff();
  }
});

そして、私は次のようなコンテンツスクリプトを持っています:

// content1.js
chrome.extension.onRequest.addListener(function (sender, request, sendResponse) {
  if (request.targetScript === "content1") {
    sendResponse({ fromCorrectScript:true });
  } else {
    sendResponse({});
  }
}); 

// content2.js
chrome.extension.onRequest.addListener(function (sender, request, sendResponse) {
  if (request.targetScript === "content2") {
    sendResponse({ fromCorrectScript:true });
  } else {
    sendResponse({});
  }
});

私の理解では、バックグラウンド ページのコールバックは、各コンテンツ スクリプトから 1 回ずつ、2 回呼び出す必要があります。if節にブレークポイントがある場合にのみ、2 回しか呼び出されないように見えます。ここで何か間違ったことをしていますか?

ありがとう、

-グレッグ

4

2 に答える 2

0

問題の原因が何であるかはわかりません。コールバックを実行するスクリプトが最初にコールバックを実行すると、残りのスクリプトが破棄されると推測できます。

ただし、回避策を提案できます。バックグラウンドページからスクリプトだけでなく、双方向にリクエストを送信できます。したがって、背景ページは次のようになります。

chrome.tabs.sendRequest(tabId, { targetScript:"content1" });

chrome.extension.onRequest.addListener(function (request, sender, sendResponse) {
  if (request.fromCorrectScript) {
    DoMoreStuff();
  }
}); 

そしてスクリプトで:

chrome.extension.onRequest.addListener(function (request, sender, sendResponse) {
  if (request.targetScript === "content1") {
    chrome.extension.sendRequest({fromCorrectScript:true});
  } else {
    chrome.extension.sendRequest({fromCorrectScript:false});
  }
}); 

これは窒息するべきではありません。

于 2010-08-24T19:27:59.560 に答える
0

メッセージに応答するコンテンツ スクリプトが 1 つだけであることを確認している限り、正しく動作しているように見えます。したがって、コンテンツ スクリプト コードは次のようになります。

// content1.js
chrome.extension.onRequest.addListener(function (sender, request, sendResponse) {
  if (request.targetScript === "content1") {
    sendResponse({ fromCorrectScript:true });
  }
});

// content2.js
chrome.extension.onRequest.addListener(function (sender, request, sendResponse) {
  if (request.targetScript === "content2") {
    sendResponse({ fromCorrectScript:true });
  }
});
于 2010-08-31T21:54:08.370 に答える