我有一个功能,可以为内容脚本提供一些json数据。该问题仅在第二次运行时才能正常运行。不知道如何解决:(
let links = {};
chrome.runtime.onMessage.addListener(
function (request, sender, sendResponse) {
if (request.get == "links") {
chrome.tabs.getAllInWindow(null, function (tabs_) {
for (var i = 0; i < tabs_.length; i++) {
if ((tabs_[i]['url'].match(some_var))) {
links[i] = [tabs_[i]['title'],
tabs_[i]['index']
];
}
}
console.log(links);
});
console.log(JSON.stringify(links));
sendResponse({reply: JSON.stringify(links)});
}
});
我第一次运行该函数时,它将返回一个空对象{},然后工作正常。
答案 0 :(得分:0)
chrome.tabs.getAllInWindow
是异步的-因此sendResponse
在function (tabs_)
才有机会做它的事情之前正在运行...将最后两行放在回调内部-像这样
chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) {
if (request.get == "links") {
chrome.tabs.getAllInWindow(null, function (tabs_) {
const links = {};
for (var i = 0; i < tabs_.length; i++) {
if ((tabs_[i]['url'].match(some_var))) {
links[i] = [tabs_[i]['title'],
tabs_[i]['index']
];
}
}
console.log(links);
console.log(JSON.stringify(links));
sendResponse({reply: JSON.stringify(links)});
});
return true; // this signifies the response is asynchronous
}
});