javascript - 后台 Chrome 扩展 list V3 库

标签 javascript google-chrome-extension chrome-extension-manifest-v3

我正在将我的 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/

相关文章:

javascript - jQuery 使用 'this' - 缩略图交换图像,Twitter Bootstrap

javascript - 将占位符添加到多个谷歌图表字符串过滤器

javascript - chrome 扩展程序中的后台脚本究竟何时运行?

javascript - 对于 Chrome 上动态加载的 iframe,contentWindow 未定义

javascript - Dropbox + Chrome 扩展 Oauth 接收器

javascript - executeScript 未定义或不是 ManifestV3 扩展中的函数

javascript - 是否可以使用 getDisplayMedia() 禁用光标记录

video - 通过实际代码从具有 .TS 或 .m3u8 文件路径的视频流中下载内容视频,以便我可以制作 chrome 扩展

javascript - Angular 无限 $digest 循环