?
This document uses PHP Chinese website manual Release
激活CSP (Content Security Policy,上下文安全策略) 支持。
這是開發(fā)像Google Chrome Extensions等東西時(shí)所必須的。
CSP禁止應(yīng)用使用 eval
或 Function(string)
生成的函數(shù) (以及其它東西)。讓 Angular兼容CSP我們只要做兩件不同的事:
Function
構(gòu)造來(lái)生成優(yōu)化的值獲取(value getters)AngularJS 使用 Function(string)
生成函數(shù)來(lái)優(yōu)化速度。使用 ngCsp
指令會(huì)引起Angular使用CSP兼容模式。 當(dāng)AngularJS處于這個(gè)模式時(shí),計(jì)算所有表達(dá)式的速度會(huì)比非CSP模式慢30%,但是不會(huì)發(fā)生安全違規(guī)行為。
CSP禁止JavaScript內(nèi)聯(lián)樣式表規(guī)則。在非CSP模式,Angular自動(dòng)包含一些CSS規(guī)則(例如ngCloak)。為了使這些指令能在CSP模式下工作,請(qǐng)手工包含angular-csp.css
。
Angular嘗試自動(dòng)檢測(cè)CSP是否激活來(lái)自動(dòng)打開CSP安全模式。這個(gè)自動(dòng)檢測(cè)會(huì)引發(fā)一個(gè)CSP錯(cuò)誤并輸出到控制臺(tái):
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.
這個(gè)錯(cuò)誤是無(wú)害的,但很討厭。為了防止錯(cuò)誤顯示,放置ngCsp
指令到應(yīng)用的根元素上,或放在angular.js
腳本標(biāo)簽中,不管哪種方式,必須是在html文檔中最先出現(xiàn)。
注意:這個(gè)指令只會(huì)在ng-csp
和 data-ng-csp
屬性表單中生效。
<html>
...
</html>
這個(gè)例子演示如何放置 ngCsp
指令到 html
標(biāo)簽上。
<!doctype html>
<html ng-app ng-csp>
...
...
</html>