【发布时间】:2012-01-20 02:22:54
【问题描述】:
Chrome 18 Dev/Canary 刚刚发布,某些扩展的清单中需要content_security_policy。
我正在尝试让 CSP 用于内联脚本,但我不知道我做错了什么,或者这是否是 Chrome 18 的错误。
manifest.json:
{
"name": "CSP Test",
"version": "1.0",
"manifest_version": 2,
"options_page": "test.html",
"content_security_policy": "default-src 'unsafe-inline'"
}
test.html:
<html><head>
<script type="text/javascript">
alert("hello");
</script>
</head></html>
在 Chrome 18 中,这个解压后的扩展加载失败,显示错误:
如果我将'unsafe-inline' 更改为'self',扩展加载正常,但alert() 不起作用,并且选项页面的控制台包含错误:
因为 Content-Security-Policy 拒绝执行内联脚本。
在 Chrome 16 中,使用 'unsafe-inline' 可以让扩展程序正常加载,alert() 也可以正常工作。但是,在 Chrome 16 中,将 'unsafe-inline' 替换为 'foo' 可以加载扩展程序,但当然不会让 alert() 工作,因此 Chrome 18 可能比 16 更严格,但是...
default-src 'unsafe-inline' 实际上是无效的,还是这是一个错误?我可以使用什么 CSP 值使 alert() 在 Chrome 18 中工作?
根据下面接受的答案,内联脚本不再适用于 Chrome 18 的扩展程序。alert() 需要放在自己的 JavaScript 文件中。
【问题讨论】:
-
使用沙盒 iframe,允许 eval 和内联脚本。无需触及内容安全策略中的任何内容。看一看:developer.chrome.com/docs/extensions/mv2/sandboxingEval
标签: google-chrome google-chrome-extension content-security-policy