【问题标题】:Chrome Extensions Content-Security-PolicyChrome 扩展内容安全策略
【发布时间】:2013-02-01 14:23:33
【问题描述】:

我的扩展需要动态加载代码。我写这个来加载它-

    var se = document.createElement('script');
se.setAttribute('type', 'text/javascript');
se.appendChild(document.createTextNode(code));
document.getElementsByTagName('head').item(0).appendChild(se);

这是我在 manifest.js 中的安全策略 -

 "content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'"

这会引发 javascript 错误 -

 "Refused to execute inline script because it violates the following Content Security Policy directive: "script-src 'self' 'unsafe eval'"

我的问题是 - 为什么不放松?我特别在 manifest 中添加了该行以允许不安全的 evals 。

【问题讨论】:

    标签: javascript html google-chrome google-chrome-extension content-security-policy


    【解决方案1】:

    我认为导致错误的不是您对eval 的使用。通过将<script> 块注入文档的head,您似乎违反了执行内联JavaScript 的政策。

    根据Content Security Policy上的文档:

    内联 JavaScript 不会被执行。此限制禁止内联块和内联事件处理程序(例如

    另请注意:

    内联脚本

    没有机制可以放宽对执行内联 JavaScript 的限制。特别是,设置包含“unsafe-inline”的脚本策略将无效。

    您必须想出一种方法,利用外部 js 文件来完成您想要做的任何事情,而不是将您的代码内联。

    【讨论】:

    • 看起来这些政策是用分号分隔的,并且错误消息可能只是从您的manifest.json 中提取了违反的特定政策。在这种情况下,script-src 及其设置 'self'unsafe-eval
    • 您可以通过从您的内联脚本中删除所有出现的eval 并查看您是否收到相同的错误来测试我的答案。另一种选择是尝试使用上面的代码注入一些任意 JavaScript,例如function 只调用 alert
    【解决方案2】:

    只需将其添加到您的 manifest.json 中,对我有用。

     "content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'"
    

    【讨论】:

      猜你喜欢
      • 2021-09-24
      • 2013-12-23
      • 1970-01-01
      • 2014-06-06
      • 2014-10-26
      • 1970-01-01
      • 2020-02-28
      • 2012-09-10
      • 1970-01-01
      相关资源
      最近更新 更多