页面加载后向内容脚本发送消息
Send message to content script after page load
我正在尝试迭代 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');
}
}
);
如果异步页面加载是您的问题,这样的事情可能会有所帮助:
chrome.tabs.update(null, {
url: url
}, function (tab) {
chrome.tabs.onUpdated.addListener(function listener (tabId, info) {
if (info.status === 'complete' && tabId === tab.id) {
chrome.tabs.onUpdated.removeListener(listener);
chrome.tabs.sendMessage(tab.id, {message: 'update_user'});
}
});
});
});
这会为每个错误的 URL 添加一个单独的侦听器 onUpdated
。每个侦听器仅适用于显式打开的单个选项卡,因此没有 "accidents".
的机会
加载选项卡后,将删除侦听器并发送消息。
我正在尝试迭代 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');
}
}
);
如果异步页面加载是您的问题,这样的事情可能会有所帮助:
chrome.tabs.update(null, {
url: url
}, function (tab) {
chrome.tabs.onUpdated.addListener(function listener (tabId, info) {
if (info.status === 'complete' && tabId === tab.id) {
chrome.tabs.onUpdated.removeListener(listener);
chrome.tabs.sendMessage(tab.id, {message: 'update_user'});
}
});
});
});
这会为每个错误的 URL 添加一个单独的侦听器 onUpdated
。每个侦听器仅适用于显式打开的单个选项卡,因此没有 "accidents".
加载选项卡后,将删除侦听器并发送消息。