Это не <doctype html>
.Это:
<!DOCTYPE html>
<html (xmlns or any other attributes you want)>
<!DOCTYPE
не является элементом.Он имеет <!
в начале, что недопустимо для элемента.Это «объявление типа doctype », и его невозможно изменить после первоначального анализа.
Даже в браузерах, чьи интерфейсы DOM позволяют перемещать / заменять узел DocumentType
, представляющий тип документадекларация, это не имеет эффекта переключения между режимами Quirks и Standards, которые решаются только при начальной загрузке.Вы не можете изменить документ между режимами.
Вы можете загрузить новый документ из существующего документа, но с измененным режимом:
<!-- no doctype, loads in Quirks Mode (BackCompat) -->
<html>
<!-- rest of the document, then at the end: -->
<script>
alert('now in compatMode '+document.compatMode);
if (document.compatMode==='BackCompat') {
setTimeout(function() {
var markup= document.documentElement.innerHTML;
markup= '<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">'+markup+'</html>';
document.open();
document.write(markup);
document.close();
}, 0);
}
</script>
</html>
Но янастоятельно рекомендую против этого. Это некрасиво, сбрасывает любое состояние и перерисовывает в конце времени загрузки и имеет все виды негативных последствий для сценариев.
Если вы хотите использовать Standards Mode, вам действительно нужночтобы добавить тип документа в сам HTML.Если вы абсолютно не можете прикоснуться к приложению, как насчет использования фильтра ISAPI (при условии, что ваш веб-сервер - IIS), чтобы добавить тип документа в его вывод HTML?