我正在构建一个chrome扩展程序并尝试从twitter获取数据,然后将其传递给我的脚本。我遇到很多问题。我能够从远程站点获取数据,但似乎无法将其传递给我的内容脚本。当我使用chrome.extension.onclick.addlistener(functionname);
点击图标时,我有一个监听器。这得到了数据。问题是,一旦我获得数据,我需要从我的内容脚本发送对请求的响应。所以我也打电话给chrome.extension.Onrequest.addlistener(functioname);
。在我继续试图找出代码有什么问题之前,是否允许在同一页面中为2个独立事件设置2个侦听器,或者只有一个侦听器?
答案 0 :(得分:2)
我知道这是一个疯狂的老问题,但我在遇到相关问题时遇到了这个问题,想要分享,以防其他人有用。
如果您确实有多个侦听器,请确保您最多只调用一次sendResponse
方法。来自文档:
sendResponse:有响应时调用(最多一次)的函数。 参数应该是任何可以使用JSON的对象。如果你有超过 一个onMessage监听器在同一个文件中,那么只有一个可以发送一个 响应。事件侦听器时此函数变为无效 返回,除非您从事件侦听器返回true以指示 您希望异步发送响应(这将保留消息 通道打开到另一端,直到调用sendResponse)。
答案 1 :(得分:0)
如果您在Stackoverflow上进行快速搜索,您将看到许多示例,其中包含有关如何将消息从后台页面发送到内容脚本的代码: https://stackoverflow.com/search?tab=relevance&q=content%20script%20background%20page
有关如何执行此操作的详细信息,您可以按照文档本身进行操作,它们有很好的示例: http://code.google.com/chrome/extensions/messaging.html
从文档(复制粘贴):
<强> content_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);
});
});
答案 2 :(得分:0)
您为onClick事件创建了一个侦听器,并且onRequest事件的侦听器不是问题。你可以在控制台输入chrome.onClick和chrome.OnRequest来说明背景页面;你会看到它们都是'chrome.Event'类型的实例。
如果您考虑一下,如果您只能创建一个侦听器,那么会大大降低您编写有用内容的能力,因为您只能响应{onrequest,onclick,ontabchange,onconnect,ondisconnect等}之一。