Javascript $sanitize自定义白名单
Javascript $sanitize自定义白名单,javascript,angularjs,angularjs-directive,sanitization,Javascript,Angularjs,Angularjs Directive,Sanitization,$sanitize服务 然后将所有安全令牌(来自白名单)序列化回 正确转义的html字符串 我只想显示更小的HTML子集(即em、p、a和strong)。有没有一种方法可以轻松地修改$service白名单而不必修改核心JavaScript?您可以修饰$sanitize服务以避免更改源文件。下面是一个示例,它只记录$sanitize中发生的事情。您可以根据需要过滤不需要的元素 var app = angular.module("app", ["ngSanitize"]); app.config(
$sanitize
服务
然后将所有安全令牌(来自白名单)序列化回
正确转义的html字符串
我只想显示更小的HTML子集(即
em
、p
、a
和strong
)。有没有一种方法可以轻松地修改$service
白名单而不必修改核心JavaScript?您可以修饰$sanitize服务以避免更改源文件。下面是一个示例,它只记录$sanitize中发生的事情。您可以根据需要过滤不需要的元素
var app = angular.module("app", ["ngSanitize"]);
app.config(function($provide){
$provide.decorator("$sanitize", function($delegate, $log){
return function(text, target){
var result = $delegate(text, target);
$log.info("$sanitize input: " + text);
$log.info("$sanitize output: " + result);
return result;
};
});
});
注意,在decorator内部,$delegate指的是$santize。在调用$delegate(text,target)之前,您将从输入中筛选出所需内容,然后返回结果。您可以使用$delegate(如jdforsyth所述)和其他库。我个人在我的项目中使用,因为它允许我选择允许哪些标记。设置:
angular
.module('myApp', [])
.config(['$provide', ($provide) => {
$provide.decorator('$sanitize', ['$delegate', ($delegate) => {
return function(text, target) {
const preSanitizedText = sanitizeHtml(text, {
allowedTags: ['b', 'i', 'em', 'strong', 'a']
});
return $delegate(preSanitizedText, target);
};
}]);
复制指令的源代码,并从中创建自己的指令;)我可以(遗憾的是,我不得不使用angular resource),但我希望尽可能避免偏离基本文件。您最终找到了解决方案吗?还是你自己创建的?@user3319803我最终选择了Angular's,并根据我们的需要对其进行了修改:虽然我没有检查jdforsythe的解决方案,因为在提供解决方案时,这已经完成了,所以他们的可能是更好的途径