
[英]chrome.runtime.onInstalled.addListener unexpectedly opens tabs?
[英]chrome.runtime.onInstalled.addListener manifest version 3 migration from version 2
我有一个用于 Gmail 的 2 年旧 chrome 扩展,我正在更新到版本 3。我使用 iframe 将 JSON 数据传输到我的服务器/从我的服务器传输,这在使用版本 2 或 3 时效果很好。
我遇到的问题是 background.js (适用于版本 2)
//background.js reloads gmail when extension installed or refreshed
chrome.runtime.onInstalled.addListener(function(){
chrome.tabs.query({url: "https://mail.google.com/*"}, function(tab) {
if ( typeof tab[0].url != 'undefined' && tab[0].url.indexOf('https://mail.google.com') == 0 ) {
chrome.tabs.reload(tab[0].id);
}
});
});
在清单 V2 中,它是这样声明的:
"background": {
"scripts": ["background.js"],
"persistent": false //true
},
在 manifest V3 中,我们现在必须使用 service worker:
"background": [{
"service_worker": "background.js"
}],
有2个问题:
更多信息: 从后台页面迁移到服务人员
谢谢。
听起来你是写得不好的文档文章的受害者:作者是 web 开发人员,他似乎认为有必要强调服务工作者是不同的更好的东西,而它在概念上与事件页面脚本(又名“非持久性背景脚本”),我们在过去几年中一直在使用。
由于您已经在使用事件页面,您可以简单地继续做您一直做的事情:注册 API 事件处理程序,如 chrome.runtime.onInstalled 或 chrome.tabs.onUpdated,以便 Chrome 在内部记住注册。 当 worker 在 30 秒不活动后终止时,如果您订阅的事件发生,Chrome 将启动 worker,整个脚本将再次运行,然后您的侦听器将被调用。 重申一下,这与事件页面的工作方式完全相同。
PS您的服务人员代码错误地添加了[
和]
。 这是正确的代码:
"background": {
"service_worker": "background.js"
},
在以下: chrome.tabs.query({url: "https://mail.google.com/*"}, function(tab) {
“标签”未定义,所以我添加了
"permissions": ["tabs"],
到清单,一切正常。 奇怪的是使用版本 2 我不需要这个权限。
还要感谢@wOxxOm,他为我指明了正确的方向。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.