GWT:setInnerHTML取消映射属性值
GWT: setInnerHTML unescapes attribute values
这个字符串:<a onclick="doit(''')">...</a>
是从服务器端接收的,需要设置为元素的内部HTML。
当我使用Element#setInnerHTML
时,字符串被转换为<a onclick="doit(''')">...</a>
,即将HTML实体取消映射为它所代表的字符。
如何在没有实体转换的情况下预生成内部HTML赋值?
澄清:内部HTML赋值只取消映射属性值内的实体
setInnerHTML()
实现本身没有问题,因为它的唯一作用是为底层JS对象分配一个属性值,通过检查Element
的源代码可以看出:
public final native void setInnerHTML(String html) /*-{
this.innerHTML = html || '';
}-*/;
问题出在浏览器中,无辜地遵循HTML文档表示规范中的Charset Entity References指南并解析实体,这些实体在属性节点内是允许的(因此被解析)。
根据规范:
作者还应在属性值中使用"
&
",因为字符CDATA属性值中允许引用。
解决方案
在服务器端(或通过过滤器或指定的客户端代理),用相应的HTML实体转义属性值内的所有特殊字符,例如:
<a onclick='"doit('&#39;')'">...</a>
W3C参考文献
- HTML文档表示法·Charset
- 字符实体引用
相关文章:
- 使用Google'设置ID属性;s映射API
- GWT:setInnerHTML取消映射属性值
- 使用挖空 JS 映射选项将可观察属性添加到映射的可观察数组
- 将 Json 对象映射到每个属性类和数据
- 映射 Json 数据并添加数据属性
- JavaScript 将数组映射到对象属性
- 有没有一种简单/快速的方法将“data-”属性映射到大小写混合的属性名称
- JSON 对象属性在映射事件处理程序中未定义
- 如何在对象属性上映射字符串序列
- 尝试在不可扩展对象上定义属性时,弱映射填充项引发错误
- 未捕获的类型错误: 无法读取未定义的属性“映射”
- D3 数据映射:传入气泡属性的气泡上的 OnClick 事件
- 避免'无法读取未定义'的属性;映射数据时出错
- 必应映射实体集合DOM属性
- 从函数返回属性映射
- 热门的是用jQuery将html输入属性映射到对象
- 将元素属性映射到元素文本
- jQuery.返回对象属性映射时出现映射错误
- JSON Javascript - 属性映射 - 函数引用
- 击倒映射选项;将一个JSON属性映射到两个视图模型属性