AngularJS $sce
$sce 服务是AngularJs提供的一种严格上下文转义服务。
严格的上下文转义服务
严格的上下文转义(SCE)是一种需要在一定的语境中导致AngularJS绑定值被标记为安全使用语境的模式。由用户通过ng-bind-html绑定任意HTML语句就是这方面的一个例子。我们称这些上下文转义为特权或者SCE。
下面代码是简化了的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
string
在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()并且返回原来提供的值。如果这个条件不满足,则抛出一个异常。
getTrustedHtml(value);
$sceDelegate.getTrusted ($sce.HTML,value)的快捷方式。
参数
类型
描述
value
*
通过$sce.getTrusted执行后的值。
getTrustedCss(value);
$sceDelegate.getTrusted ($sce.CSS,value)的快捷方式。
参数
类型
描述
value
*
通过$sce.getTrusted执行后的值。
getTrustedUrl(value);
$sceDelegate.getTrusted ($sce.URL,value)的快捷方式。
参数
类型
描述
value
*
通过$sce.getTrusted执行后的值。
getTrustedResourceUrl(value);
$sceDelegate.getTrusted ($sce.RESOURCE_URL,value)的快捷方式。
参数
类型
描述
value
*
通过$sce.getTrusted执行后的值。
getTrustedJs(value);
$sceDelegate.getTrusted ($sce.JS,value)的快捷方式。
参数
类型
描述
value
*
通过$sce.getTrusted执行后的值。
parseAsHtml(expression);
$sce.parseAs ($sce.HTML,value)的快捷方式。
参数
类型
描述
expression
string
被编译的字符串表达式。
parseAsCss(expression);
$sce.parseAs ($sce.CSS,value)的快捷方式。
参数
类型
描述
expression
string
被编译的字符串表达式。
parseAsUrl(expression);
$sce.parseAs ($sce.URL,value)的快捷方式。
参数
类型
描述
expression
string
被编译的字符串表达式。
parseAsResourceUrl(expression);
$sce.parseAs ($sce.RESOURCE_URL,value)的快捷方式。
参数
类型
描述
expression
string
被编译的字符串表达式。
parseAsJs(expression);
$sce.parseAs ($sce.JS,value)的快捷方式。
参数
类型
描述
value
string
被编译的字符串表达式。