Влияет ли выбор DOCTYPE на DOM, как видно из кода JavaScript?
-
05-07-2019 - |
Вопрос
Учитывая большой унаследованный проект, использующий технологии ASP.NET, javascript, css и т. д., мне было интересно, если изменить DOCTYPE веб-страниц, скажем, с HTML 4.0 Transitional на XHTML 1.0 Transitional (или наоборот) любым способом может нарушить функции javascript на веб-страницах.
Существует множество статей и дискуссий о том, как различные DOCTYPES влияют на визуализацию страниц (css), но я не могу найти ничего похожего на предмет взлома любого кода.
Я ищу ссылки на статьи о вещах, которые следует остерегаться в целом, чтобы лучше определить потенциальные проблемы в существующем коде и избежать возникновения проблем при написании нового кода.
Решение
Будет ли изменение DOCTYPE нарушать какие-либо функции JavaScript, на самом деле зависит от того, насколько защищенно эти функции разработаны:)
Например, когда документ отображается в режиме quirks , document.body
(BODY) становится так называемым «корневым элементом»; при отображении в стандартном режиме этим корневым элементом обычно является document.documentElement
(HTML). Это довольно существенное различие. Если скрипт, который определяет размер экрана браузера, всегда запрашивает свойства clientWidth
/ clientHeight
из document.documentElement
, он, очевидно, сообщит о неверных результатах в режиме причуд (поскольку IIRC, document.documentElement.clientWidth / clientHeight
будет представлять размеры элемента HTML, а не экранные).
Большинство библиотек JS обычно явно указывают, поддерживается ли режим quirks (например, мы - Prototype.js - не поддерживаем режим quirks).
Говоря о HTML против XHTML , чтобы браузер отображал документ как XHTML, вы должны прежде всего предоставить его с правильным " Content-type " заголовок (то есть application / xhtml + xml). Если вы измените только тип документа на XHTML, но по-прежнему будете использовать документ как " text / html " ;, большинство известных мне браузеров все равно будут анализировать (и отображать) его как документ HTML .
Обратите внимание, что на сегодняшний день IE не понимает " реальный " Содержимое XHTML, поэтому рекомендуется использовать документы как text / html (с HTML4.01 doctype) (если, конечно, IE не входит в число поддерживаемых браузеров).
Что касается особенностей DOM в «реальной» Документы XHTML, я слышал, что некоторые вещи, такие как document.write
" не работают " и что доступ к атрибутам узла всегда должен выполняться через getAttribute / setAttribute
(а не через более простые методы доступа к свойствам). Во IIRC также есть некоторые проблемы с innerHTML
.
Отсутствие информации о DOM в " реальном " Документы XHTML, вероятно, обусловлены его непрактичностью в документах / приложениях для общего Интернета (т. Е. В IE его не поддерживают).
Другие советы
Если вы используете DTD:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
тогда ваш сайт находится в режиме причуд в IE и режиме почти стандартов в современных браузерах, и поскольку переходный dtd xhtml 1.0 переводит страницу в режим стандартов, в Javascript будут возникать проблемы с макетом и потенциальные проблемы (особенно в IE), поскольку есть некоторые существенные различия между тем, как DOM отображается в причудах по сравнению со стандартами.
Однако, если HTML 4.01 DTD содержит системный идентификатор:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
Это уже должно быть в стандартном режиме. Вы можете проверить, запросив «document.compatMode» на вашем сайте, он скажет «CSS1Compat», если он находится в стандартах, в противном случае «BackCompat», если в режиме причуд.
Я предполагаю, что вы собираетесь использовать Content-Type text / html с XHTML 1.0 Transitional.