对于Chrome扩展,我有一个非常简单的背景页面:
chrome.runtime.onInstalled.addListener((reason) => {
console.log(reason);
});
当加载我的扩展时,后台页面将运行:
该扩展还有一个弹出窗口,运行getBackgroundPage(),使用:
const serviceWorkerWindow = await chrome.runtime.getBackgroundPage();
但以下几个方面都失败了:
Uncaught (in promise) Error: You do not have a background page.
我如何使getBackgroundPage()
工作?
发布于 2022-10-28 09:57:06
基于@wOxxOm的评论回答我自己的问题。如果wOxxOm自己写了答案,我会把它标记为正确的。
我的期望基于Google的文档是getBackgroundPage()
检索运行在当前扩展/应用程序中的背景页的JavaScript 'window‘对象。
在现代JS术语中,这将是服务工作者的globalThis
(服务工作者在清单v3中仍然被称为background
)。
正如wOxxOm所说。
这个API不能工作。这些文档只是过时了,因为ManifestV3团队只有几个开发人员,他们没有时间做所有事情。
本质上,Chrome扩展文档没有得到充分的维护。有一个应该和服务人员一起工作 -谢谢@erosman。弹出窗口和后台服务工作人员之间进行通信的最佳方法是通过扩展消息传递。Ie:
chrome.runtime.sendMessage()
和:
chrome.runtime.onMessage.addListener()
发布于 2022-10-27 16:09:15
getBackgroundPage()
方法不检索后台脚本,而是对象与后台脚本关联。。如您所知,Manifest V3不使用后台脚本,而是使用服务工作者。根据定义,服务工作者是没有访问窗口对象的权限。
你的用例是什么?也许我可以建议另一种方法。
https://stackoverflow.com/questions/74224782
复制相似问题