我正在更新我的铬扩展从清单v2到v3。这是旧的舱单:
宣言V2:
{
"manifest_version": 2,
"name": "Legacy Search Assistant",
"version": "0.1.1",
"content_scripts": [
{
"matches": [
"https://*.legacysite.io/*","*://*/api*"
],
"js": ["jquery-3.6.0.min.js","content.js"]
}
],
"options_page": "options.html",
"background": {
"scripts": ["jsencrypt.min.js", "jquery-3.6.0.min.js", "background.js"]
},
"browser_action": {
"default_icon": "icon.png",
"default_popup": "popup.html",
"default_title": "Legacy Search"
},
"permissions": [
"storage"
]
}由于jsencrypt.min.js已经加载在清单中,所以我能够在background.js中调用它的函数,但是现在我已经使用了清单v3,所以让服务工作者访问这个库遇到了问题。
例如,当我在background.js中进行此调用时:
importScripts("/scripts/jsencrypt.min.js");它引发以下错误:
Error handling response: Error: Failed to execute 'importScripts' on 'WorkerGlobalScope': The script at 'chrome-extension://<extension ID>/scripts/jsencrypt.min.js' failed to load.如果我单击错误中的链接,它将直接带我到我想要加载的库。
我已经尝试过这个答案中的所有修补程序。如果可以的话请帮忙。
发布于 2022-09-07 21:42:42
我最后使用的解决方案是将jsencrypt的所有用法移到content.js中。这使得模块能够正常工作,并且不会在我们使用chrome扩展的环境中公开公钥。
在创建和初始化jsencrypt对象之后,我通过消息将其传递给后台脚本。
发布于 2022-01-26 16:54:48
importScripts()是在工人中加载脚本的旧方法。
现在我们可以用更现代的ES模块代替。
从Chrome 91开始,我们可以在服务人员中使用JavaScript模块。
只需在清单中将类型属性设置为模块。
{
"manifest_version": 3,
"background": {
"service_worker": "background.js",
"type": "module"
}这将将服务工作人员作为ES模块加载,该模块允许您在服务工作人员中使用导入关键字来导入其他模块。前-
// background.js
import * as module from './scripts/jsencrypt.min.js';但是,请确保您正在导入的脚本(在本例中为./scripts/jsencrypt.min.js )导出了您想要使用的所需代码。
https://stackoverflow.com/questions/70715942
复制相似问题