$sanitize
服务告诉我
然后将所有安全令牌(来自白名单)序列化回正确转义的 html 字符串。
我只想显示更小的 HTML 子集(即em
、p
、a
和strong
)。有没有一种$service
无需修改核心 JavaScript 即可轻松修改白名单的方法?
$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;
};
});
});
请注意,在装饰器内部,$delegate 指的是 $santize。您将在调用 $delegate(text, target) 之前从输入中过滤出您想要的内容,然后返回结果。
您可以使用 $delegate (如 jdforsythe 所述)和其他一些库。我个人在我的项目中使用sanitizeHtml,因为它允许我选择允许的标签。设置:
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);
};
}]);