javascript - 页面加载后向内容脚本发送消息
问题描述
我正在尝试遍历 URL 的数组 inside background.js
。对于每个 URL,我希望它导航当前选项卡,然后发送一条消息content_script.js
告诉它执行操作。
问题是它立即发送它而不是在页面加载时发送(实际上它甚至在更新 URL 之前发送它)
背景.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'});
}
});
});
});
onUpdated
这会为每个错误的 URL添加一个单独的侦听器。每个侦听器仅适用于显式打开的单个选项卡,因此不会发生“意外”。
加载选项卡后,侦听器将被删除并发送消息。
推荐阅读
- javascript - javascript 是否有像堆栈和队列这样的对象/容器?
- asp.net-core - IApplicaionBuilder 不包含定义 UseEndpoints。app.UseEndpoints(...) 在 ASP.NET CORE 上不起作用
- amazon-web-services - 如何使用 AWS Batch 从私有存储库中提取 Docker 映像?
- sas - 如果从 %INCLUDE 调用,SAS 代码以 0 个观察值运行
- javascript - Javascript从末尾开始拆分字符串
- scala - 在 Spark 中读取连接的 json 对象?
- javascript - 带密码验证 javascript 和 html 表单
- arrays - Angular 8 和 FormArrays 如何初始化下拉列表以选择数组附带的初始值
- swift - 在 SWIFTUI 中添加新窗口并使其成为关键窗口
- flutter - 有 Flutter 全屏通知的插件吗?