【发布时间】:2018-12-25 14:51:06
【问题描述】:
我正在尝试遍历background.js 中的 URL 数组。对于每个 URL,我希望它浏览当前选项卡,然后向 content_script.js 发送一条消息,告诉它执行一个操作。
问题在于它是立即发送,而不是在页面加载时发送(实际上它甚至在更新 URL 之前发送)
background.js:
chrome.tabs.update(null, {
url: 'https://www.example.com/' + path
}, function(tab) {
chrome.tabs.sendMessage(tab.id, {message: 'update_user'});
});
content_script.js
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
if (request.message === 'update_user') {
console.log('loaded');
}
}
);
【问题讨论】:
-
问题可能是导航到新 URL 是异步的。例如,如果您运行
window.location.href = ...; console.log("hello");,则会打印 hello,然后页面会发生变化。您可以在发送消息之前通过记录tab.status来检查发生的情况。它将是“加载”或“完成”。你正在“加载”吗? -
我目前无法检查,但我确定答案是肯定的。我可以通过不尝试来判断,因为如果我之前执行过 console.log('anything')它,我可以在窗口重定向之前 看到打印它的瞬间。然后,在清除控制台的重定向之后,这个词就消失了,证明它甚至在重定向之前就记录了。
-
您可以在 devtools 中检查“保留日志”,以便重定向不会清除它。它甚至会在导航发生时记录一行。
标签: javascript google-chrome google-chrome-extension google-chrome-app