Chrome显示错误:由于Content-Security-Policy而拒绝执行内联脚本

V15*_*M4Y 38 jquery google-chrome google-chrome-extension

我正在创建一个图像裁剪小工具的Chrome扩展程序.我的代码popup.html如下:

    <body>
            <textarea id="widget_script" style="border:1px solid #ccc;padding:5px;width:600px" rows="5" readonly></textarea>
            <script type="text/javascript">
                var protocol=window.location.protocol;
                var host= window.location.host;
                var head=('<div id="wd_id" style="margin-bottom: 20px;"></div>
                <script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></\script>
                <script type="text/javascript" src="'+protocol+'//'+host+'Image_crop/cropimages/img_crop_widget.js'+'"><\/script>
                <script type="text/javascript">init_widget()<\/script>');
                document.getElementById("widget_script").innerHTML=head;
            </script>
    </body>
Run Code Online (Sandbox Code Playgroud)

变量协议主机从浏览器中的URL 获取协议主机.当我尝试将其整合为Chrome扩展程序时,它无效.当它完美地工作时,它在textarea中显示以下代码:

<div id="wd_id" style="margin-bottom: 20px;"></div>
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>
<script type="text/javascript" src="http://localhost/cropimages/img_crop_widget.js"></script>
<script type="text/javascript">init_widget()</script>
Run Code Online (Sandbox Code Playgroud)

我有几件事情,把JS代码放在外部JS文件中,并manifest.json在我的调用中调用该文件popup.html,但没有一个工作.

任何人都可以告诉我我做错了什么,或者我还应该尝试使其有效?

提前致谢...

aps*_*ers 74

来自Chrome扩展程序CSP文档:

内联JavaScript将不会被执行.此限制禁止内联<script>块和内联事件处理程序(例如<button onclick="...">).

不能在扩展程序HTML中使用内联脚本,例如:

<script>alert("I'm an inline script!");</script>

<button onclick="alert('I am an inline script, too!')">
Run Code Online (Sandbox Code Playgroud)

相反,您必须将脚本放在单独的文件中:

<script src="somescript.js"></script>
Run Code Online (Sandbox Code Playgroud)

  • 如何从 html 按钮调用“somescript.js”中的“alert”? (2认同)
  • 没关系找到:https://developer.chrome.com/extensions/tut_migration_to_manifest_v2#inline_scripts (2认同)

das*_*dsa 27

如果你使用 React 和 create-react-app:

  1. .env在项目根目录下创建一个文件

  2. 添加变量如下: INLINE_RUNTIME_CHUNK=false

  3. 再次构建项目并再次加载扩展。

来源

  • 如果您是 CRA 用户,我可以确认这就是您正在寻找的。 (2认同)

emo*_*mon 8

您必须添加content_security_policymanifest.json文件中:

"content_security_policy": "script-src 'self' 'sha256-B+Qe/KNUDtGDd/m1g5ycAq1DgpLs9ubKmYTlOHBogC8='; object-src 'self'"

您将从控制台找到哈希。

在此处输入图片说明

  • sha256-B + Qe / KNUDtGDd / m1g5ycAq1DgpLs9ubKmYTlOHBogC8 =是什么?它来自哪里?每次我运行应用程序时,它似乎都会改变。 (4认同)