无法从Polymer中的自定义过滤器呈现HTML

时间:2014-11-10 18:11:44

标签: polymer

我正在尝试使用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]

1 个答案:

答案 0 :(得分:1)

TemplateBinding子系统包含一个HTML过滤器,可以保护开发人员免受XSS攻击。因此,将HTML(与纯文本相对)插入DOM必须手动完成。

例如:

<p id="sentence"></p>
...
activityChanged: function(old, activity) {
   // build html
   this.$.sentence.innerHTML = html;
}

您现在有一个漏洞,因此请务必屏蔽源数据。