我正在尝试使用html标签准备句子,但它无法呈现HTML,而是显示转义字符。
<p>
{{ activity | prepareSentence }}
</p>
创建用于聚合物模板的自定义过滤器。
prepareSentence: function(activity) {
var sentence = [];
if (1) {
sentence.push('<a href="/user/'
+ activity.from_user.entity_id + '/'
+ activity.from_user.name + '">You</a>');
sentence.push(' are following ');
sentence.push('<a href="/user/'
+ activity.to_entity.entity_id + '/'
+ activity.to_entity.name + '">'
+ activity.to_entity.name + '</a>');
}
return sentence.join(' ');
}
当前输出:
<a href="/user/22/name1">name1</a> are following <a href="/user/21/name2">name2</a>
预期产出:
[You][1] are following [name2][1]
答案 0 :(得分:1)
TemplateBinding子系统包含一个HTML过滤器,可以保护开发人员免受XSS攻击。因此,将HTML(与纯文本相对)插入DOM必须手动完成。
例如:
<p id="sentence"></p>
...
activityChanged: function(old, activity) {
// build html
this.$.sentence.innerHTML = html;
}
您现在有一个漏洞,因此请务必屏蔽源数据。