Google chrome chrome扩展后台页面可以有多个侦听器吗?
我正在构建一个chrome扩展,并试图从twitter获取数据,然后将其传递给我的contentscript。我在这方面有很多问题。我能够从远程站点获取数据,但似乎无法将其传递到我的内容脚本。当我使用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.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扩展可以在其背景页面中有多个侦听器。