Google chrome chrome扩展后台页面可以有多个侦听器吗?

Google chrome chrome扩展后台页面可以有多个侦听器吗?,google-chrome,google-chrome-extension,messaging,Google Chrome,Google Chrome Extension,Messaging,我正在构建一个chrome扩展,并试图从twitter获取数据,然后将其传递给我的contentscript。我在这方面有很多问题。我能够从远程站点获取数据,但似乎无法将其传递到我的内容脚本。当我使用chrome.extension.onclick.addlistener(functionname)单击图标时,我有一个监听器。这将获取数据。问题是,一旦我获得了数据,我需要从我的内容脚本发送对请求的响应。所以我也调用chrome.extension.Onrequest.addlistener(fu

我正在构建一个chrome扩展,并试图从twitter获取数据,然后将其传递给我的contentscript。我在这方面有很多问题。我能够从远程站点获取数据,但似乎无法将其传递到我的内容脚本。当我使用
chrome.extension.onclick.addlistener(functionname)单击图标时,我有一个监听器。这将获取数据。问题是,一旦我获得了数据,我需要从我的内容脚本发送对请求的响应。所以我也调用
chrome.extension.Onrequest.addlistener(functionme)。在我继续尝试找出代码的错误之前,是否允许在同一页面中为两个单独的事件使用两个侦听器,或者您只能使用一个侦听器?

如果您对Stackoverflow进行快速搜索,您将看到许多示例,其中包含如何将消息从后台页面发送到内容脚本的代码:

有关如何执行此操作的更多信息,您可以按照文档本身进行操作,它们有很好的示例:

从文档中(复制粘贴):

content\u script.cs

chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
 if (request.greeting == "hello")
   sendResponse({farewell: "goodbye"});
 else
   sendResponse({}); // snub them.
});
background.html

chrome.tabs.getSelected(null, function(tab) {
  chrome.tabs.sendRequest(tab.id, {greeting: "hello"}, function(response) {
    console.log(response.farewell);
  });
});

您已经为onClick事件和onRequest事件创建了一个监听器,这并不是问题。您可以通过在控制台的后台页面中键入chrome.onClick和chrome.OnRequest来判断;您将看到它们都是“chrome.Event”类型的实例


如果你想一想,如果你只能创建一个侦听器,那么你写有用东西的能力就会大大降低,因为你只能响应{onrequest,onclick,ontabchange,onconnect,ondisconnect,等等}

我知道这是一个疯狂的老问题,但我在遇到一个相关问题时遇到了这个问题,我想与大家分享一下,以防它对其他人有用

如果有多个侦听器,请确保最多只调用一次
sendResponse
方法。从文档中:

sendResponse:有响应时调用(最多一次)的函数。 参数应该是任何JSON ifiable对象。如果你有超过 同一文档中有一个onMessage侦听器,则只有一个可以发送 答复。当事件侦听器 返回,除非从事件侦听器返回true以指示 您希望异步发送响应(这将保留消息) 通道向另一端开放,直到调用sendResponse)


我想你可以自己测试一下这个问题,测试的时间和你问问题的时间差不多。我测试过,但我无法判断我的代码是否有问题,或者代码是否正常,这取决于这个规则。如果您有更有用的回复,我将不胜感激。您介意分享一些代码吗?这样其他人就可以在你的代码中寻找可能的问题。要回答标题(这就是我如何到达该页面的原因),Chrome扩展可以在其背景页面中有多个侦听器。