首页 > 解决方案 > 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 中的快照 在 此处输入图像描述

标签: javascriptgoogle-chrome

解决方案


我搜索了一篇文章提到“关于服务工作者的注意事项”,以下是第三条注意事项:

“它在不使用时终止,并在下次需要时重新启动,因此您不能依赖服务工作者的 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


推荐阅读