Влияет ли выбор DOCTYPE на DOM, как видно из кода JavaScript?

StackOverflow https://stackoverflow.com/questions/1403887

  •  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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top