javascript - tabs.executeScript 在访问 Content Script 中定义的函数时遇到 ReferenceError
问题描述
更新:似乎问题来自于 Webpack 在其自己的函数中执行每个模块的事实,这意味着全局范围内不能存在任何模块。有什么优雅的方法可以解决这个问题,以便我可以在 Webpacked 内容脚本中定义一个函数并从不同的内容脚本访问它?
原文:
在我的主要内容脚本中,我定义了一个函数
function foo() {
console.log("foo")
}
在我的background.js
中,我注入了一个新的内容脚本,如下所示:
browser.tabs.query({currentWindow: true, active: true}).then(res => {
browser.tabs.executeScript(res.id, {code: "foo()"})
})
在我的标签控制台中,我看到
VM181:1 Uncaught ReferenceError: foo is not defined
at <anonymous>:1:1
两个内容脚本应该在同一个执行环境中,所以我应该能够在两个脚本中共享函数和变量。
我最近添加了 Webpack 来构建我的 Chrome 扩展程序,并且我正在使用Webextension-Polyfill将chrome.*
API 承诺为browser
.
在我的代码的旧版本中,这工作得很好,但现在它不工作了。我有一种感觉,这是因为 Webextension-Polyfill,但老实说,我无法弄清楚。
编辑:
executeScript
代码正在选项卡中运行。我可以console.log
,它出现在控制台中。但是,它似乎无法访问我现有内容脚本的命名空间。
编辑 2:
我添加了另一个内容脚本
function foo() {
console.log("foo")
}
它可以从注入的脚本中访问。所以我想这与Webpack有关。
它与 Webpack 包中的范围有关吗?
解决方案
推荐阅读
- amazon-web-services - 如何在同一个域 EKS 下提供来自 api 和静态资源(来自 s3)的调用
- javascript - 在 chrome 开发者工具中禁用 debugger 语句
- spring-boot - 如何升级 Spring Boot 应用程序
- javascript - 如何将字符串转换为数组
- python - 如何在python中使用导入模块中的库
- javascript - 未设置 canvas.height 时,在画布上将音频绘制为条形音箱不会覆盖上一次绘制
- firebase - 适用于 NodeJS CollectionReference.onSnapshot(querySnapshotCallback ...) 的 Firestore SDK 是否像在客户端上一样带来 RT 更新?
- javascript - Leaflet conditionalLayer插件地图变量未定义
- c++ - 如何在不出现此错误的情况下将 listnode 值设置为 Null?
- javascript - 从页面的一部分检索输入值