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({});
  }
});

我的理解是我在后台页面中的回调应该被调用两次,一次来自每个内容脚本。看起来它有时只被调用了两次,而且几乎只有当我在if子句中有断点时才被调用。我在这里做错了吗?

谢谢,

-格雷格

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

好吧,只要我确保只有一个内容脚本响应消息,它看起来就可以正常工作。所以我的内容脚本代码应该更像:

// 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 回答