在DomPurify中允许HTML注释

时间:2018-11-13 15:32:00

标签: javascript html sanitization dompurify

我想使用DOMPurify清理一些HTML内容,但是我想保留HTML注释。有可能吗?

您可以在this example中看到它的作用-如果您输入带有注释的标记,注释将被删除。

DOMPurify似乎非常可配置,但是docs并未提及用于将HTML注释指定为允许标签的术语。

2 个答案:

答案 0 :(得分:1)

DOMPurify没有任何钩子或配置,不允许html字符串中的注释。您可以执行此操作,只需将<!---->替换为任何自定义属性,并提供配置以允许ADD_TAGS: ['comment']

var dirty = "<!-- I am ready now, click one of the buttons! -->ac <script>in script<\/script> <b>hello</b>";
dirty = dirty.replace(/(<!--)/g,'<comment>').replace(/(-->)/g,'</comment>');
var config = { ALLOWED_TAGS: ['b'],ADD_TAGS: ['comment']};
var clean = DOMPurify.sanitize(dirty, config);
clean = clean.replace(/(<comment>)/g,'<!--').replace(/(<\/comment>)/g,'-->');
console.log("clean => ",clean);

jsFiddle演示-http://jsfiddle.net/4j6c28ve/

答案 1 :(得分:0)

我有同样的问题,有一个更好的解决方案,不是messing around with regex in markup(剧透警告:不要!):

var dirty = "<!-- I am ready now, click one of the buttons! -->ac <script>in script<\/script> <b>hello</b>";
var config = { ADD_TAGS: ['#comment'], FORCE_BODY: true };
var clean = DOMPurify.sanitize(dirty, config);
console.log("clean => ",clean);
// >>> clean => <!-- I am ready now, click one of the buttons! -->ac  <b>hello</b>