如何使用SafeHTML而不是String设置GWT UiBinder元素的内部HTML?

时间:2011-08-30 19:39:36

标签: gwt innerhtml uibinder

我有以下由UiBinder创建的元素:

@UiField UListElement phones;

使用以下标记:

<ul ui:field="phones" class="contact section"></ul>

我以前一直使用方法setInnerHtml(String)来设置值。例如:

phones.setInnerHtml("<li><span class='title'>" + title + 
    "</span><div class='phone'><a href='tel:" + number + "'>" + 
    number + "</a></div></li>");

我现在想使用SafeHtmlTemplates来减少出现XSS(跨站点脚本)问题的可能性。使用SafeHtmlTemplate,我现在回到SafeHtml,我想坚持我的phone元素变量。我该怎么做呢?我没有看到一个采用SafeHtml类型变量的方法。

1 个答案:

答案 0 :(得分:1)

要使用SafeHtml,您必须坚持使用GWT小部件。更具体:

  

随着com.google.gwt.safehtml包的引入,所有采用被解释为HTML的String参数的核心GWT库的小部件都使用带有SafeHtml类型值的相应方法进行了扩充。特别是,所有实现HasHTML(或HasDirectionalHtml)接口的小部件也实现了HasSafeHtml(或HasDirectionalSafeHtml)接口。

如果Ui:Binder应该生成安全的html,你必须在模块xml中设置以下属性:

<set-configuration-property name="UiBinder.useSafeHtmlTemplates" value="true" />