アップデート2:
http://www.w3.org/TR/2008/WD-html5-20080610/dom.html#innerhtml1 (設定の第2部)から、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>