一、嚴格的上下文轉義服務
嚴格的上下文轉義(SCE)是一種需要在一定的語境中導致AngularJS綁定值被標記為安全使用語境的模式。由用戶通過ng-bind-html綁定任意HTML語句就是這方面的一個例子。我們稱這些上下文轉義為特權或者SCE。
二、$sce
$sce 服務是AngularJs提供的一種嚴格上下文轉義服務。
下面代碼是簡化了的ngBindHtml實現(當然,這不是完整版ngBindHtml源碼):
var ngBindHtmlDirective = ['$sce', function($sce) { return function(scope, element, attr) { scope.$watch($sce.parseAsHtml(attr.ngBindHtml), function(value) { element.html(value || ''); }); }; }];支持哪些信任的上下文類型?
$sce.HTML 將HTML代碼安全的綁定到應用程序中。
$sce.CSS 將CSS樣式代碼安全的綁定到應用程序中。
$sce.URL 將URL安全的綁定到應用程序中并保證其可用。比如(href,src)
$sce.RESOURCE_URL 將RESOURCE_URL安全的綁定到應用程序中并保證其可用。比如(ng-href,ng-src)
$sce.JS 將JAVASCRIPT代碼安全的綁定到應用程序中。
如何使$sce服務可用或者不可用?
angular.module(“myApp”,[]).config([“$sceProvider”,function($sceProvider){ $sceProvider.enabled(true/false); }]);使用:$sce();
方法:
isEnabled();
返回一個boolean,指示是否可啟用SCE。
parseAs(type,expression);
將Angular表達式轉換為一個函數。這類似$parse解析并且當表達式是常量時是相同的。否則,它將調用$sce.getTrusted(type,result)將表達式包裝。
type:在SCE的上下文的使用的結果的類型。
expression:被編譯的字符串表達式。
trustAs(type,value);
代表$sceDelegate.trustAs。
type:上下文中能安全的被使用的值,如url,resourceUrl,html,js和css。
value:需要被認為是安全或者值的信賴的值。
trustAsHtml(value);
$sceDelegate.trustAs($sce.HTML,value)的快捷方式。
value:被信任的值。
trustAsUrl(value);
$sceDelegate.trustAs($sce.URL,value)的快捷方式。
value:被信任的值。
trustAsResourceUrl(value);
$sceDelegate.trustAs($sce.RESOURCE_URL,value)的快捷方式。
value:被信任的值。
trustAsJs(value);
$sceDelegate.trustAs($sce.JS,value)的快捷方式。
value:被信任的值。
getTrusted(type,maybeTrusted);
代表$sceDelegate.getTrusted。因此,得到了$sce的結果。如果查詢的上下文類型是一個創造型的類型,則調用trustAs()并且返回原來提供的值。如果這個條件不滿足,則拋出一個異常。
新聞熱點
疑難解答
圖片精選