©
This document uses PHP Chinese website manual Release
激活CSP (Content Security Policy,上下文安全策略) 支持。
这是开发像Google Chrome Extensions等东西时所必须的。
CSP禁止应用使用 eval
或 Function(string)
生成的函数 (以及其它东西)。让 Angular兼容CSP我们只要做两件不同的事:
Function
构造来生成优化的值获取(value getters)AngularJS 使用 Function(string)
生成函数来优化速度。使用 ngCsp
指令会引起Angular使用CSP兼容模式。 当AngularJS处于这个模式时,计算所有表达式的速度会比非CSP模式慢30%,但是不会发生安全违规行为。
CSP禁止JavaScript内联样式表规则。在非CSP模式,Angular自动包含一些CSS规则(例如ngCloak)。为了使这些指令能在CSP模式下工作,请手工包含angular-csp.css
。
Angular尝试自动检测CSP是否激活来自动打开CSP安全模式。这个自动检测会引发一个CSP错误并输出到控制台:
Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of
script in the following Content Security Policy directive: "default-src 'self'". Note that
'script-src' was not explicitly set, so 'default-src' is used as a fallback.
这个错误是无害的,但很讨厌。为了防止错误显示,放置ngCsp
指令到应用的根元素上,或放在angular.js
脚本标签中,不管哪种方式,必须是在html文档中最先出现。
注意:这个指令只会在ng-csp
和 data-ng-csp
属性表单中生效。
<html>
...
</html>
这个例子演示如何放置 ngCsp
指令到 html
标签上。
<!doctype html>
<html ng-app ng-csp>
...
...
</html>