我正在将我的 chrome 扩展从 manifest v2 更新到 v3。
这是旧 list :
list 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 已经加载到 list 中,我可以在 background.js 中调用它的函数,但是现在我已经转到 list v3,我在让服务 worker 访问这个库时遇到了问题。例如,当我在 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.
如果我单击错误中的链接,它会将我直接带到我想要加载的库。我已经尝试了 this answer 中的所有修复。 .如果可以的话请帮忙。
最佳答案
importScripts() 是在 worker 中加载脚本的旧方法。
现在我们可以使用更现代的 ES 模块来代替。
从 Chrome 91 开始,我们可以在 service worker 中使用 JavaScript 模块。
刚设置类型 属性(property)给 模块 在 list 中。
{
"manifest_version": 3,
"background": {
"service_worker": "background.js",
"type": "module"
}
这会将 service worker 加载为 ES 模块,让您可以使用 进口 服务 worker 中的关键字以导入其他模块。前任-// background.js
import * as module from './scripts/jsencrypt.min.js';
但请确保您正在导入的脚本如 ./scripts/jsencrypt.min.js 在这种情况下,已导出您要使用的所需代码。Learn about ES modules
关于javascript - 后台 Chrome 扩展 list V3 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70715942/