Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript $sanitize自定义白名单_Javascript_Angularjs_Angularjs Directive_Sanitization - Fatal编程技术网

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的解决方案,因为在提供解决方案时,这已经完成了,所以他们的可能是更好的途径