更新 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>