Google chrome extension 如何在Chrome的扩展中包含库
我想在manifest.js`中包含ethereumjs-tx.js`而不包含内容\脚本 我的Google chrome extension 如何在Chrome的扩展中包含库,google-chrome-extension,Google Chrome Extension,我想在manifest.js`中包含ethereumjs-tx.js`而不包含内容\脚本 我的manifest.js: { "manifest_version": 2, "name": "MyExtension", "version": "1.0", "background": { "scripts": ["background.js"] }, "permissions": [ "tabs", "notifications", "http://*
manifest.js
:
{
"manifest_version": 2,
"name": "MyExtension",
"version": "1.0",
"background": {
"scripts": ["background.js"]
},
"permissions": [
"tabs",
"notifications",
"http://*/",
"https://*/"
]
}
我认为Airlancer有一个观点,即如果您的脚本不在
content\u脚本中,库之间会发生冲突
从中也可以看出:
您不应该使用background
标记来添加js库。你好多了
停止下载扩展并将其与所需库绑定
并把它作为一个例子
如果要在后台脚本中添加库,可以包含一个HTML并加载HTML中的所有库,并在manifest.js中的后台选项中添加该HTML
manifest.json
"background": {
"page": "background.html",
"persistent": false
}
background.html
<script src="./lib/moment/moment.min.js"></script>
<script type="module" src="./js/background.js"></script>
有两种方法可以将外部库包含到Chrome中扩展的后台脚本中。我说背景脚本,因为该脚本最有可能需要外部库
为了澄清这一点,您的后台脚本在不同于用户正在使用的任何网页的范围内运行。因此,在后台脚本中加载外部库不会覆盖正在使用的网页中的任何内容
方法1:使用清单文件中background
键的scripts
键
在scripts
键的值内,添加一个数组,其中包含对所需库的引用以及后台脚本。请注意,数组中的顺序很重要。首先列出的脚本将首先加载
例如:
// ...
"background": {
"scripts": ["jquery.min.js", "background.js"]
}
//...
"background": {
"page": "background.html",
"persistent": true
},
//...
"content_security_policy": "script-src 'self' http://code.jquery.com; object-src 'self'"
在这里,你的背景页面将由Chrome自动构建
方法2:在清单文件中使用背景
键的页面
键
有时,在项目目录中保存一个2.5MB的库文件是没有效率的
使用此方法,您将构建自己的后台页面,使用脚本标记远程加载所需的后台脚本和库
从manifest.json
文件中的后台
键中删除脚本
键,并将其替换为页面
。您可以使用脚本
键或页面
键,但不能同时使用这两个键。页面的值是对背景html页面的引用
但这还不够。Chrome的安全策略禁止您远程下载资源
因此,修改content\u security\u policy
键以放宽默认安全策略,并指定后台页面下载库的URL
例如:
// ...
"background": {
"scripts": ["jquery.min.js", "background.js"]
}
//...
"background": {
"page": "background.html",
"persistent": true
},
//...
"content_security_policy": "script-src 'self' http://code.jquery.com; object-src 'self'"
为了什么?我认为这是不可能的。它旨在使您的扩展不覆盖您正在与之交互的网站所使用的现有库。假设您的扩展使用jquery 1.3版,但网站使用的是jquery 1.2版。如果扩展中的脚本没有在内容脚本中运行,那么这些库将发生冲突。我将lib包含在“background”中,向下看这应该是一个注释,而不是答案,因为它根本不回答问题。