【问题标题】:Chrome Extension "Refused to load the script because it violates the following Content Security Policy directive"Chrome 扩展“拒绝加载脚本,因为它违反了以下内容安全策略指令”
【发布时间】:2016-04-29 05:57:34
【问题描述】:

我正在尝试创建一个 Chrome 扩展程序,但我的 JS 都不起作用。控制台显示此错误:

拒绝加载脚本 'https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js' 因为它违反了以下内容安全政策指令: “script-src 'self' blob:文件系统:chrome-extension-resource:”。

为什么它会阻止我的 jQuery 运行?

【问题讨论】:

标签: javascript jquery html google-chrome google-chrome-extension


【解决方案1】:

我找到了这个解决方案

清单 V3

"content_security_policy": {
    "extension_pages": "script-src 'self'; object-src 'self'; script-src-elem 'self' 'unsafe-inline' https://music.yandex.ru/;"
}

【讨论】:

    【解决方案2】:

    我会告诉你长话短说。 Google Chrome 具有 CSP(内容安全策略),这意味着 chrome 扩展程序不允许外部脚本。如果您使用的是vue cdn,那么只需执行以下步骤即可。

    • 在 manifest.json 中添加以下代码并根据需要更改文件名。 'unsafe-eval' 是您要查找的内容,只需添加此内容即可。
    {
        "manifest_version": 2,
        "name"            : "Hello Extension",
        "version"         : "1.0",
        "permissions": [
            "https://cdn.jsdelivr.net/npm/vue/dist/vue.js"
        ],
        "background": {
            "scripts": ["popup.js"],
            "persistent": false
          },
        "description"     : "Testing the hello world extension",
        "icons": {
            "16"    : "icons16.png",
            "48"    : "icons16.png",
            "128"   : "icons16.png"
        },
        "browser_action": {
            "default_icon"   : "icons16.png",
            "default_popup" : "popup.html"
        },
        "content_security_policy": "script-src 'self' 'unsafe-eval' https://cdn.jsdelivr.net; object-src 'self'"
    }
    
    • 在您的 external js 此处 popup.js 添加 Vue 代码,一切都会很好。
    var app = new Vue({
        el: "#app",
        data: {
            name: ""
        }
    });
    

    【讨论】:

    • 如何将 content_security_policy 更新为 manifest v3...正如许多人所说的那样会有不同。
    【解决方案3】:

    根据Chrome Extension documentation,您需要将外部资源的副本下载到您的包文件夹中并在本地加载脚本。

    不允许加载外部脚本。

    【讨论】:

    • 不允许加载外部脚本?但是如何将其更改为允许?
    【解决方案4】:

    如 Chome website 中所述, 有一个内容安全策略阻止您的脚本加载远程脚本:

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

    "content_security_policy": "script-src 'self' https://example.com; object-src 'self'"

    所以在你的情况下,manifest.json 应该包含:

     {
      "name": "My Extension",
      "manifest_version": 2,
      "background":{
         "scripts": [...]
      },
      "content_security_policy": "script-src 'self' https://example.com; object-src 'self'",
     }
    

    【讨论】:

    【解决方案5】:

    内容安全策略是您应用程序的另一层安全保护。它可以让您定义您加载任何样式、脚本或数据的所有来源。对于每种样式、脚本、字体或连接,您需要指定要在应用程序中加载的域。如果您使用的是其他域的 CDN jQuery,则需要在 Content Security Policy 中指定该域。

    如果您不想要这个额外的安全层并且想从您希望的任何域加载样式或脚本,只需在 index.html 中添加以下元标记并确保它位于任何导入之前.

    <meta http-equiv="Content-Security-Policy" content="default-src *;">
    

    这里 * 是通配符,可让您访问任何域。如果你想要这个额外的安全层,我建议你去documentation,它非常清楚如何指定你想要在你的应用程序中导入的所有域

    【讨论】:

      【解决方案6】:

      好吧,你不能为 js 使用 CDN,你将不得不复制“https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js”的内容并在你的 js 目录中创建一个新文件并将其命名为 jquery.min.js 并将所有内容粘贴到其中,然后在您的 HTML 文件标题中删除包含此 url 的行并改用此

      <script src="js/jquery.min.js"></script>
      

      但请确保这是包含上述 url 中所有数据的文件的写入路径

      干杯,

      【讨论】:

        【解决方案7】:

        我的 HTML 文件有 &lt;script&gt; some js code within it &lt;/script&gt;。删除脚本标签后,错误消失了。

        【讨论】:

          【解决方案8】:

          您是否在清单 JSON 文件中允许它。像这样的:

          manifest.json

           {
             "name": "My Extension",
             "content_scripts": [{
               "js": ["jquery.min.js", "YourJavaScriptFile.js"],
               "matches": ["http://*/*", "https://*/*"]
             }]
           }
          

          我省略了一些必填字段,但只是给出了基本概念。

          【讨论】:

          • 现在全部设置好了。感谢您的帮助,这很值得!
          • 好吧,这并没有按计划进行。我现在收到以下控制台错误:Uncaught ReferenceError: $ is not defined
          • 使用此语法后,我得到一个“加载扩展失败”
          猜你喜欢
          • 1970-01-01
          • 2015-09-21
          • 2016-10-24
          • 1970-01-01
          • 2021-04-22
          • 1970-01-01
          • 1970-01-01
          • 2020-06-23
          相关资源
          最近更新 更多