我的扩展中需要动态加载代码。我写这个加载它 -
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'"
我的问题是 - 为什么不放松?我明确地在清单中添加了一行以允许不安全的逃避。
答案 0 :(得分:2)
我认为你使用的eval
不会导致错误。通过将<script>
块注入文档的head
,您似乎违反了执行内联JavaScript的策略。
根据Content Security Policy上的文件:
不会执行内联JavaScript。此限制禁止内联块和内联事件处理程序(例如&lt; button onclick ='...'&gt;)。
另请注意:
内联脚本
没有放松对执行内联JavaScript的限制的机制。特别是,设置包含“unsafe-inline”的脚本策略将不起作用。
不必将代码置于内联中,而是必须采用一种方法,利用外部js
文件来完成您正在尝试的任何内容。
答案 1 :(得分:1)
只需将此添加到您的manifest.json,为我工作。
"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'"