Влияет ли выбор DOCTYPE на DOM, как видно из кода JavaScript? - PullRequest
5 голосов
/ 10 сентября 2009

Учитывая большой унаследованный проект, использующий технологии ASP.NET, javascript, css и т. Д., Мне было интересно, если изменить DOCTYPE веб-страниц, скажем, с HTML 4.0 Transitional на XHTML 1.0 Transitional (или наоборот) любым способом может нарушить функции javascript на веб-страницах.

Существует множество статей и дискуссий о том, как различные DOCTYPES влияют на визуализацию страниц (css), но я не могу найти ничего похожего на предмет взлома любого кода.

Я ищу ссылки на статьи о вещах, которые следует остерегаться в целом, чтобы лучше определить потенциальные проблемы в существующем коде и избежать создания проблем при написании нового кода.

Ответы [ 2 ]

6 голосов
/ 11 сентября 2009

Будет ли изменение 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 ее не поддерживают).

1 голос
/ 10 сентября 2009

Если вы используете 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.

...