Xpoint
   [напомнить пароль]

маленькое исследование -- Javascript в XHTML

Метки: [без меток]
2006-09-12 17:52:51 [обр] Виталий Шароватов(0/21)[досье]
Cобственно, в ответ на все пугалки вроде нерабочего javascript'а в xhtml хочу сказать: всё работает, в FF и уж тем более в Опере xhtml, отданный как application/xhtml+xml, имеет такой же HTML DOM, как и xhtml, отданный как text/html. Соответственно работают все коллекции document.*, работает innerHTML. Единственное, что нужно помнить — помещать инлайн-скрипты и стили в CDATA. Впрочем, гораздо проще их выносить во внешние файлы.
небольшая статья (на английском): http://bitari.blogspot.com/2006/09/javascript-on-xhtml-pages.html
тестовая страница:
http://nix.vlz.ru/test/
спустя 1 час 12 минут [обр] Владимир Палант(149/4445)[досье]
сообщение промодерировано

А кто-то сомневался, что он работает? Как-то ведь на Xpoint все пашет :)

Но некоторые утверждения у вас странные.

  1. document.write в XHTML все-таки не работает, см. http://ln.hixie.ch/?start=1091626816&count=1
  2. innerHTML работает только с Gecko 1.8 (то есть Firefox 1.5), до этого не работал (так что это не слухи).
  3. document.forms и прочие коллекции работают — но в качестве ключей у них атрибут id, а не name.
  4. Работает ли document.all с XHTML никак не связано — в Gecko он работает только в Quirks Mode, да и то лишь в том случае, если страница не проверяет сначала его существование.

Ваша тестовая страница в основном проверяет лишь существование функций, а это еще далеко не показатель.

спустя 5 часов [обр] Илья Cтpeльцын aka SelenIT(4/171)[досье]
AFAIK, есть еще мелкие нюансы, в частности регистр tagName.
спустя 12 часов [обр] Виталий Шароватов(0/21)[досье]

Владимир Палант[досье]

  1. тут Вы правы, в Firefox я document.write не стал проверять. То, что он там не работает - это серьёзный баг. Во-первых, потому что document.write является полноценной частью HTMLDocument и обязан быть реализован так же, как и все остальные свойства/методы интерфейса HTMLDocument. Что и сделано в Опере.
  2. неработающий innerHTML также был багом исключительно Firefox, и в 2004 году (если я не ошибаюсь) уже были патчи на эту тему.

по поводу document.all — я в статье писал, что оно в Gecko работает только в quirks mode. Надеюсь, авторы всё-таки реализуют document.all в любом режиме, что даст повод ещё некоторому количеству пользователей уйти с IE.

Я подготовлю более полные тесты.

спустя 1 день [обр] Владимир Палант(149/4445)[досье]

Виталий Шароватов[досье]

  1. Вы ссылку читали? Как, по-вашему, выглядит осмысленная реализация document.write() в XHTML? Только не говорите, что "как в Опере", потому что в Опере XHTML жутко кривой, и еще и кривой document.write() впридачу меня уже не удивит. Желательно увидить хоть какое-то подобие спецификации, конечно.
  2. Патчи в 2004 году? Возможно, но кому нужны патчи? Firefox 1.5 вышел в ноябре 2005. Проблема, кстати говоря, была в том же — не слишком понятно, как запись в innerHTML должна работать в XHTML (DOM3 Load&Save этого недостатка лишен, авось скоро его реализуют).

document.all позволит уйти с IE? А когда вы в последний раз видели сайт, который зависел от этого извращения?

спустя 8 часов [обр] Виталий Шароватов(0/21)[досье]

Владимир Палант[досье]

  1. Владимир, я читал и ссылку, и обсуждение бага 111514. Именно в этом обсуждении разработчики Firefox решили создавать объект HTMLDocument для XHTML-страниц, отданных как application/xhtml+xml. Раз решили создавать объект, необходимо реализовывать все методы, определённые в интерфейсе HTMLDocument.
  2. Firefox1.5 вышел, innerHTML было непонятно как сделать, но сделали; работает замечательно. document.all тоже сделали, работает — и замечательно. БОльшая совместимость с существующими скриптами — это что, плохая цель?
не слишком понятно, как запись в innerHTML должна работать в XHTML

Факт есть факт, она работает даже в XHTML served as text/xml or application/xhtml+xml. Видимо, особых проблем в реализации не было.

спустя 1 год 1 месяц [обр] Илья Cтpeльцын aka SelenIT(4/171)[досье]
В Safari 3b под Windows с любым "XML-содержащим" Content-type в предложенном тесте работает только document.URL. По крайней мере, у меня...
Powered by POEM™ Engine Copyright © 2002-2005