提问人:pathikrit 提问时间:11/10/2023 最后编辑:pathikrit 更新时间:11/16/2023 访问量:114
在 Chrome 扩展程序中使用 CDN Javascript 库(清单 v3)
Using CDN Javascript libraries in Chrome extensions (manifest v3)
问:
我有一个简单的 Chrome 扩展程序,它使用 ChatGPT 分析页面并创建 Google 日历邀请。完整的源代码在这里,但这里是代码的核心,当点击时会读取当前页面的文本:
manifest.json
:
{
"manifest_version": 3,
"name": "Chrome AI",
"version": "0.0.1",
"action": {
"default_popup": "index.html",
"default_icon": "chrome_ai.png"
},
"permissions": [
"tabs",
"activeTab",
"scripting",
"storage"
],
"host_permissions": ["<all_urls>"]
}
index.html
:
<!doctype html>
<html lang="en">
<head>
<title>Chrome AI</title>
<script src="vendors/jquery-3.7.1.min.js"></script>
<script defer src="index.js"></script>
</head>
<body>
<button id="gcal">Create Google Calendar Invite</button>
<code id="logs"></code>
</body>
</html>
index.js
$('#gcal').on('click', executeInTab(() => document.body.innerText).then(text => $('#logs').append(text)))
executeInTab = (f) => chrome.tabs.query({active: true, lastFocusedWindow: true})
.then(([tab]) => chrome.scripting.executeScript({target: {tabId: tab.id}, function: f}))
.then(([{ result }]) => result)
但是,正如你所看到的,这需要我下载并签入。由于将库依赖项签入您的存储库是一种不好的做法(与您不签入您的库的原因相同),我更喜欢简单地使用 CDN 来托管我的库。但是,当我尝试添加时,出现以下错误:jquery
vendors/jquery-3.7.1.min.js
node_modules
jsdelivr
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.min.js"></script>
在有人将这个问题作为重复项关闭之前,以下是其他答案不起作用的原因:
答:
0赞
aarvinr
11/16/2023
#1
为了提高安全性,Chrome 已删除了对 Manifest V3 扩展程序中 CDN 的支持,或使用远程托管 JavaScript 的任何其他方式。
他们推荐了一些解决方案:
- 您还可以在运行时加载外部库,方法是在调用 时将它们添加到 files 数组中。您仍然可以在运行时远程加载数据:
scripting.executeScript()
chrome.scripting.executeScript({ target: {tabId: tab.id}, files: ['jquery.min.js'] });
- 只需将文件捆绑为扩展的一部分即可。我知道根据您发现的文章,这被视为不良做法,但它对用户的影响很小,而且 Chrome 文档似乎没有问题。
<script src="./jquery.min.js"></script>
评论
content_security_policy
<script>