开发者问题收集

事件处理程序中的错误:ReferenceError:窗口未定义带有清单 v3 的 chrome 扩展 [重复]

2021-06-30
19212

我正在为 chrome 扩展程序使用清单版本 3,我在后台 js 中遇到此错误: 事件处理程序中的错误:ReferenceError:未使用清单 v3 定义窗口 chrome 扩展程序

"manifest_version":3, "permissions":["contextMenus","storage", "activeTab","tabs","scripting","webRequest"],

var posLeft = ( window.width - winWidth ) / 2 ;

3个回答

ManifestV3 扩展使用服务工作线程,因此它没有 DOM 或 window

woxxom
2021-06-30

如果您尝试访问 background.js 中的 window 对象,因为它是一个服务工作者,您将无法访问 window 对象,但您可以尝试 self,因为它将具有 window 对象的所有属性 在 background.js 中尝试

console.log(self,"self")
var window = window ?? self;

注意:如果您使用 Vite 或 Webpack,这可能会起作用

在此处输入图片描述

Goutham J.M
2022-07-27

好吧,对于其他可能在类似情况下在此处查找该错误消息的人来说,当我忽略在运行时使 window 对象可访问时,而不是在注入函数动态准备通过 v3 后台脚本注入特定选项卡时,我遇到了相同的错误。

为了从 v3 后台脚本进行动态注入,选项卡特定对象(在本例中为 window )需要包含在传递的函数内,如以下匿名函数情况所示:

chrome.scripting.executeScript({
    target: { tabId: currentTab.id },
    func: () => window.history.back()
  }); 

如果 window.history.back 作为 func 的值提供,那么显然后台脚本将不知道或无法使用它,并且会出现相同的错误消息。

这确实已经在文档中进行了描述。

matanox
2021-08-28