Arr*_*rix 7 html javascript innerhtml
在此页面http://blog.zacharyvoase.com/2010/11/11/sockets-and-nodes-i/,在javascript控制台中运行以下代码将引发异常.
var div = document.createElement('div'); div.innerHTML = "»";
Run Code Online (Sandbox Code Playgroud)
但它在我尝试的所有其他页面中都能正常工作.我的问题是关于页面的特殊之处以及为什么chrome和firefox会抛出异常?
不使用实体直接编写字符可以正常工作.
var div = document.createElement('div'); div.innerHTML = "»";
Run Code Online (Sandbox Code Playgroud)
使用其他实体也有效,例如
var div = document.createElement('div'); div.innerHTML = "<";
Run Code Online (Sandbox Code Playgroud)
Arr*_*rix 16
我在回答我自己的问题.
简短的回答:这是因为浏览器的限制.
如果某些浏览器将页面识别为XHTML,则仅支持标准允许的命名字符实体的子集以进行innerHTML分配.
特别是在我的测试,似乎在Mozilla和Webkit,只是",&,<并且>被允许在innerHTML的分配.
我的测试代码可以在这里找到:https://gist.github.com/673901
XHTML是用XML重新构造的HTML的"更好"和更清晰的版本.XHTML 1.1应该是HTML的继承者和未来.但是,采用HTML5不太可能发生这种情况.
与需要专用HTML解析器的HTML不同,XHTML文档可以由通用XML解析器解析.至少在mozilla和webkit中,XHTML和HTML经历了不同的代码路径.可以理解的是,HTML代码路径是大多数努力的地方,也是更好的测试,因为有比XHTML更多的HTML文档.
值得注意的是,文档是否被识别为XHTML是由有效的MIME类型而不是文档内容决定的.
结论是,如果您正在使用XHTML,请确保在分配给.innerHTML之前将命名实体转换为数字实体(例如 - >  ).