首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >后台的Chrome扩展报表V3库

后台的Chrome扩展报表V3库
EN

Stack Overflow用户
提问于 2022-01-14 19:59:08
回答 2查看 4.9K关注 0票数 6

我正在更新我的铬扩展从清单v2到v3。这是旧的舱单:

宣言V2:

代码语言:javascript
复制
{
"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中进行此调用时:

代码语言:javascript
复制
importScripts("/scripts/jsencrypt.min.js");

它引发以下错误:

代码语言:javascript
复制
Error handling response: Error: Failed to execute 'importScripts' on 'WorkerGlobalScope': The script at 'chrome-extension://<extension ID>/scripts/jsencrypt.min.js' failed to load.

如果我单击错误中的链接,它将直接带我到我想要加载的库。

我已经尝试过这个答案中的所有修补程序。如果可以的话请帮忙。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-09-07 21:42:42

我最后使用的解决方案是将jsencrypt的所有用法移到content.js中。这使得模块能够正常工作,并且不会在我们使用chrome扩展的环境中公开公钥。

在创建和初始化jsencrypt对象之后,我通过消息将其传递给后台脚本。

票数 0
EN

Stack Overflow用户

发布于 2022-01-26 16:54:48

importScripts()是在工人中加载脚本的旧方法。

现在我们可以用更现代的ES模块代替。

从Chrome 91开始,我们可以在服务人员中使用JavaScript模块。

只需在清单中将类型属性设置为模块

代码语言:javascript
复制
{
"manifest_version": 3,
"background": {
  "service_worker": "background.js",
  "type": "module"
}

这将将服务工作人员作为ES模块加载,该模块允许您在服务工作人员中使用导入关键字来导入其他模块。前-

代码语言:javascript
复制
// background.js
import * as module from './scripts/jsencrypt.min.js';

但是,请确保您正在导入的脚本(在本例中为./scripts/jsencrypt.min.js )导出了您想要使用的所需代码。

学习ES模块

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70715942

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档