我在background.js中有这段代码:
chrome.extension.onMessage.addListener( function(request,sender,sendResponse){
chrome.tabs.query({active: true, currentWindow: true}, function(tabs){
var requests = getTabRequests(tabs[0].id);
//getTabRequests gets all the information i stored about a tab
sendResponse( {requests: requests});
});
});
我想要它做的是响应popup.js。 chrome.tabs.query
让我无法理解。我意识到这是一个异步函数,但如何修复它?或者是唯一不发送响应的可能性,而是另一个不同方向的消息(这意味着我无法在mu popup.js中使用回调函数)
答案 0 :(得分:7)
阅读chrome.runtime.onMessage
的文档:
function sendResponse
有响应时调用(最多一次)的函数。参数应该是任何可以使用JSON的对象。如果同一文档中有多个onMessage侦听器,则只有一个可以发送响应。 当事件侦听器返回时,此函数变为无效,除非您从事件侦听器返回true以指示您希望异步发送响应(这将使消息通道保持打开到另一端,直到调用sendResponse )。
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse){
chrome.tabs.query({active: true, currentWindow: true}, function(tabs){
var requests = getTabRequests(tabs[0].id);
//getTabRequests gets all the information i stored about a tab
sendResponse({requests: requests});
});
return true; // <-- Required if you want to use sendResponse asynchronously!
});
(chrome.extension.onMessage
已弃用,请改用chrome.runtime.onMessage
,前者是后者的别名。)