更新2:
从…起
http://www.w3.org/TR/2008/WD-html5-20080610/dom.html#innerhtml1
(关于设置的第二部分),XHTML的算法似乎没有提到它是否知道DOCTYPE信息,尽管它至少知道名称空间。(注意:我切换到了更简单但符合标准的XHTML5 DOCTYPE。)
我认为你可能会提供以下测试用例并将其报告为错误,或者可能会将其列入WhatWG邮件列表,因为我认为行为至少应该经过规范(除非是,我只是没有看到):
<!DOCTYPE html [
<!ENTITY nbsp " ">
]>
<html xmlns="http://www.w3.org/1999/xhtml">
<div id="a">old text</div>
<script><![CDATA[
document.getElementById('a').innerHTML = 'new text';
]]></script>
</html>
同时,如果你不想在服务器上更换,你可以使用下面的破解方法
DOMParser()
以下为:
<!DOCTYPE html [
<!ENTITY nbsp " ">
]>
<html xmlns="http://www.w3.org/1999/xhtml">
<div id="a">old text</div>
<script><![CDATA[
document.getElementById('a').innerHTML = new DOMParser().parseFromString(
'<!DOCTYPE html [<!ENTITY nbsp " ">]>'+
'<html xmlns="http://www.w3.org/1999/xhtml">'+
'new text'+
'</html>',
'application/xhtml+xml'
).documentElement.innerHTML;
]]></script>
</html>