javascript - chrome.extension.getBackgroundPage() 不适用于 manifest_version: 3
问题描述
当我在popup.js中调用backgroud.js的一个函数时,如果manifest_version为2,则有效;如果 manifest_version 为 3,则它不起作用。为什么?我该如何处理 manifest_version: 3
清单.json
//version 2
{
"manifest_version": 2,
......
"background": {
"scripts": ["background.js"]
},
}
//version 3
{
"manifest_version": 3,
......
"background": {
"service_worker": "background.js"
},
}
popup.js
var bg = chrome.extension.getBackgroundPage();
var userName = bg.getUserName();
console.log(bg);
背景.js
var userName = "John";
console.log("background");
function getUserName() {
return userName;
};
manifest_version 2 中的快照 在 此处输入图像描述
manifest_version 3 中的快照 在 此处输入图像描述
解决方案
我搜索了一篇文章提到“关于服务工作者的注意事项”,以下是第三条注意事项:
“它在不使用时终止,并在下次需要时重新启动,因此您不能依赖服务工作者的 onfetch 和 onmessage 处理程序中的全局状态。如果有信息需要在重新启动时保留和重用,服务工作者确实可以访问到 IndexedDB API。”
以上问题案例,我猜想在popup.js调用Manifest-V3中的background.js函数时background.js(as Service Worker)已经终止,所以popup.js不能调用background.js(as Service)的函数Manifest-V3 中的工人)
https://developers.google.com/web/fundamentals/primers/service-workers
推荐阅读
- powershell - 如何克服 io.filesystemwatcher 中的 80080005 服务器执行失败错误
- sql - 需要一个 SQL 查询来填写值,以便每个缺失的选项都存在于结果集中
- swift - 如何正确地从总数中减去直到在 Swift 中达到零
- javascript - 使用下面的代码,我需要添加另一个函数,如果选中了复选框,则仅移动单元格 A 中的数据和整行
- sql - 通过使用两个表中的两个不同日期进行 SQL 组
- javascript - 当我们想向 DOM 添加方法时,为什么要将元素存储在变量中?
- assembly - NASM 在 ret 之前推送
- python - Python - 列表列表的排列(并非全部相同)
- angular - 如何使用 Ivy 修复 Angular 9 生产构建中的错误:“目标入口点“模块”中的错误缺少依赖项”
- javascript - TestCafe 下拉选择器