此字符串:<a onclick="doit(''')">...</a>
从服务器端收到,需要设置为元素的内部HTML。
当我使用Element#setInnerHTML
时,字符串将转换为<a onclick="doit(''')">...</a>
,即将HTML实体转换为它所代表的字符。
如何在没有实体转换的情况下预先形成内部HTML分配?
澄清:内部HTML分配仅对属性值内的实体进行unescape。
答案 0 :(得分:2)
setInnerHTML()
实现本身没有任何问题,因为它唯一的作用是为底层JS对象分配属性值,可以通过检查Element
的源代码来看出:
public final native void setInnerHTML(String html) /*-{
this.innerHTML = html || '';
}-*/;
问题在于浏览器,无辜地遵循 HTML文档表示规范中的 Charset实体引用指南并解析您的允许的实体在属性节点内强>(因此得到解析)。
作者也应该使用&#34;
&
&#34;在属性值中,因为字符 CDATA属性值允许引用。
在服务器端(或通过过滤器或指定的客户端代理),使用相应的HTML实体转义所有特殊字符在属性值中,例如:
<a onclick=\"doit('&#39;')\">...</a>