Jquery 由于内容安全策略指令,扩展拒绝加载脚本

Jquery 由于内容安全策略指令,扩展拒绝加载脚本,jquery,google-chrome,google-chrome-extension,content-security-policy,Jquery,Google Chrome,Google Chrome Extension,Content Security Policy,下面是我的HTML代码 脚本: <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <script src="background.js"></script> 清单文件: { "manifest_version": 2, "name": "One-click Kittens", "description": "This e

下面是我的HTML代码

脚本:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="background.js"></script>
清单文件:

{
"manifest_version": 2,
"name": "One-click Kittens",
"description": "This extension demonstrates a 'browser action' with kittens.",
 "version": "1.0",
"browser_action": {
"default_icon": "icon.png",
"default_popup": "popup.html"
},
}
我发现,当我只是在浏览器中运行此代码时,警报会正确显示,但当我将其作为chrome扩展运行时,它会给我以下错误

未捕获引用错误:$未定义

拒绝加载脚本“”,因为它违反了以下内容安全策略指令:“script src‘self’chrome扩展资源:”。

我不明白这些错误是什么。请帮我理解分机


谢谢您

在Chrome扩展中,扩展(CSP)必须在您的清单中明确允许外部脚本源:

如果您需要一些外部JavaScript或对象资源,您可以通过将应该接受脚本的安全源列为白名单,在一定程度上放宽策略

允许通过HTTPS从example.com加载脚本资源的宽松策略定义可能如下所示:

"content_security_policy":"script-src 'self' https://example.com; object-src 'self'"
脚本只能通过HTTPS加载到扩展中,因此必须通过HTTPS加载jQuery CDN资源:

<script src="https://ajax.googleapis.com/..."></script>
然而,对于您的特定情况,更好的解决方案是在本地扩展中包含jQuery,而不是从Internet加载(例如,您的扩展目前无法脱机工作)。只需在扩展文件夹中包含jQuery的副本,并在脚本标记中使用相对路径引用它。假设jQuery库和HTML弹出文件位于同一子目录中,只需执行以下操作:

<script src="jquery-x.y.z.min.js"></script>

在Chrome扩展中,扩展(CSP)必须在清单中明确允许外部脚本源:

如果您需要一些外部JavaScript或对象资源,您可以通过将应该接受脚本的安全源列为白名单,在一定程度上放宽策略

允许通过HTTPS从example.com加载脚本资源的宽松策略定义可能如下所示:

"content_security_policy":"script-src 'self' https://example.com; object-src 'self'"
脚本只能通过HTTPS加载到扩展中,因此必须通过HTTPS加载jQuery CDN资源:

<script src="https://ajax.googleapis.com/..."></script>
然而,对于您的特定情况,更好的解决方案是在本地扩展中包含jQuery,而不是从Internet加载(例如,您的扩展目前无法脱机工作)。只需在扩展文件夹中包含jQuery的副本,并在脚本标记中使用相对路径引用它。假设jQuery库和HTML弹出文件位于同一子目录中,只需执行以下操作:

<script src="jquery-x.y.z.min.js"></script>



听起来您可能在遵循一个关于制作旧版本1清单扩展的指南<代码>$未定义
表示未加载jquery,第二条消息告诉您未加载jquery的原因。您应该给我们看一下您的分机清单。以下是扩展清单的文档:只需在扩展中打包jQuery。我已经下载了jQuery文件并将其链接到HTML页面。这已经让事情运转起来了,但是jquery的更新或迁移呢?我想我每次都需要手动更新jquery。听起来你可能在遵循一个关于制作旧版本1清单扩展的指南<代码>$未定义
表示未加载jquery,第二条消息告诉您未加载jquery的原因。您应该给我们看一下您的分机清单。以下是扩展清单的文档:只需在扩展中打包jQuery。我已经下载了jQuery文件并将其链接到HTML页面。这已经让事情运转起来了,但是jquery的更新或迁移呢?我想每次都需要手动更新jquery。如果需要允许多个URL呢?我在文档中没有看到任何关于如何实现这一点的例子。@Muffindman只是用空格分隔它们。请注意,CSP是Chrome aops/扩展借用的通用Web标准;一般来说,您可能会更幸运地查找CSP文档/语法。@AdityaC我已经有一段时间没有进行Chrome扩展开发了,但我认为对非脚本资源没有严格的HTTPS要求。只需将域添加到您的权限并获取JSON即可。您需要共享代码(在新问题中)和特定错误。多个URL如下所示:
“内容安全策略”:“脚本src'self”https://example.com https://anotherexample.com;对象src“self”
并确保不要像我愚蠢的那样在域后加斜杠……如果您需要允许多个URL怎么办?我在文档中没有看到任何关于如何实现这一点的例子。@Muffindman只是用空格分隔它们。请注意,CSP是Chrome aops/扩展借用的通用Web标准;一般来说,您可能会更幸运地查找CSP文档/语法。@AdityaC我已经有一段时间没有进行Chrome扩展开发了,但我认为对非脚本资源没有严格的HTTPS要求。只需将域添加到您的权限并获取JSON即可。您需要共享代码(在新问题中)和特定错误。多个URL如下所示:
“内容安全策略”:“脚本src'self”https://example.com https://anotherexample.com;object src'self'
并确保不要像我愚蠢的那样在域后加斜杠……这并不能回答问题。它没有提供任何有价值的信息。它使用的语言/库与问题中提出的不同。这并不能回答问题。它没有提供任何有价值的信息。它使用的语言/库与问题中提出的不同。
<script nonce='<?= CSP::getNonce() ?>'>
var oldCreate = document.__proto__.createElement;
document.__proto__.createElement = function (elementName) {      
    var el = oldCreate.apply(this, arguments);
    if (elementName == "script") {           
        el.setAttribute('nonce', '<?= CSP::getNonce() ?>');
    }
    return el;
}
</script>

<script nonce='<?= CSP::getNonce()?>' type="text/javascript" src="/include/jquery.js"></script>