繁体   English   中英

chrome.runtime.onInstalled.addListener 清单版本 3 从版本 2 迁移

[英]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个问题:

  1. 我相信我需要这个,还是我需要? 因此,当扩展程序在 chrome 商店和浏览器中更新时,这会导致 Chrome - Gmail 重新加载并使用最新版本。 如果我在这个假设中错了,请纠正我。 如果我处于开发者模式 (chrome://extensions) 使用解压版本,使用刷新按钮将重新加载扩展和 Gmail。
  2. 我无法弄清楚服务人员将如何工作,因为他们本质上不是持久的,而且这个“听众”需要一直在听。 有人有从版本 2 迁移到 3 的 service worker/background.js 的示例吗?

更多信息: 从后台页面迁移到服务人员

谢谢。

听起来你是写得不好的文档文章的受害者:作者是 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM