Странное поведение браузеров
Здравствуйте.
Написал вот такую страничку и обнаружил, что браузеры (пробовал FireFox 3.0.8 и IE 6) её криво парсят: принимают строку "</script>" за конец элемента script. Это баг такой или я чей-то не понимаю. Объясните, пожалста. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <title>test</title> </head> <body> <script type = "text/javascript"> alert("</script>"); </script> </body> </head> |
Обычное поведение.
alert("</scr" + "ipt>"); |
начнем с того, что если вы используете XHTML, то вы обязаны оборачивать код JS-а в блок CDATA
|
Если Вы имеете в виду doctype, так его можно убрать - будет то же самое
|
Цитата:
Цитата:
|
Dicot а что валидатор говорит? http://validator.w3.org/
|
Цитата:
|
Седня первый раз поразвлекался с валидатором - забавная весчь :)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>test</title> </head> <body> <script type="text/javascript"> alert("</script>"); </script> </body> </html> -этот текст ему не нравится. Вы, x-yuri, имели в виду эту строку спецификации: "The first occurrence of the character sequence "</" (end-tag open delimiter) is treated as terminating the end of the element's content. In valid documents, this would be the end tag for the element." ? Т.е. мой текст неправильный :( Kolyaj этот фокус alert("</scr" + "ipt>"); не проходит по той же причине. Возникает вопрос, какая ж польза от ентого валидатора акромя вреда. ... если я ошибаюся, то как вывести строку "</script>" :) |
Цитата:
alert("</scr" + "ipt>"); |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>test</title> </head> <body> <script type="text/javascript"> alert("\u003c\u002fscript>"); </script> </body> </html>- это прокатывает |
Kolyaj строку то вывести не трудно и даже браузер ето нормально кушает, а вот валидатор - нед
|
Вывод строки на валидатор не влияет. На него влияет то, что Gvozd сказал.
|
а если html-евский doctype использовать все равно эта cdata нужна?
|
Цитата:
Цитата:
Цитата:
http://www.w3.org/TR/xhtml1/dtds.htm...ict.dtd_script http://www.w3.org/TR/html401/interac...ml#edef-SCRIPT p.s. есть подозрение, что ты document.write используешь, так вот лучше его не использовать |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>test</title> </head> <body> <script type="text/javascript"> <![CDATA[ alert("</script>"); ]]> </script> </body> </html> - этот текст действительно нравится валидатору, только вот в браузерах отображается неверно :( (cdata не спасает) Да, действительно использовал write(). А что в нем плохого? Мне, например, нужно было создать новое окошко с некоторым содержимым. Если создавать элементы методами DOM - это ж сколько кода... А если так: newWin.document.open('text/html'); newWin.document.write(text); newWin.document.close(); - всего 3 строчки |
Цитата:
|
Это кушается на отлично валидатором, оперой и ослом.
второй огнелис запарывается на парсинге. видимо их движок в меньшей степени расчитан на поддержку XHTML UPD: Хром тоже нормально работает.третий огнелис не научился адекватно работать Код:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" Код:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" Мораль2:про валидатор также не забываем.очень полезный инструмент |
Цитата:
но в твоем случае может и оправдано. Хотя можно было для нового окна сделать свою html-страничку и скорректировать ее после загрузки, при этом в твоем скрипте было бы лучше видно, какая информация в него передается (если такая вообще есть) |
Gvozd а про то, что cdata надо так хитро прятать в комментарии тоже в спецификации написано?
|
Цитата:
|
Насколько я понял из статьи, дело в том, что браузеры не поддерживают XHTML. Может тогда лучше использовать HTML 4, вместо того, чтоб изобретать различные хаки для XHTML?
|
там речь идет об xhtml, который отправляется браузеру с заголовоком text/html, и из нее можно вынести недостатки такого подхода... в частности, там написано, как надо писать встроенные скрипты, таблицы стилей... хотя это несколько отличается от варианта, предложенного Gvozd. Я просто попытался найти подобное оформление содержимого этих тэгов, но может Gvozd укажет свой источник ;)
|
Неужели дело в заголовке?
Я попробовал так: <meta http-equiv="Content-Type" content="text/xml; charset=utf-8" /> и так: <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" /> - ниче не изменилось (для браузеров). Или тип содержимого указывается как-то подругому? |
Dicot, я просто ответил на твой вопрос
Цитата:
Цитата:
|
http://dimox.name/xhtml-validation-u...flash-noindex/
это про CDATA в моем посте с кодо, почему-то делается перенос после alert("</script>, сейчас сделаю просто в виде кода тот пост |
да, в общем разные есть варианты оформления содержимого тэга script, и какой из них использовать - хз
|
Насчет script я уже все понял.
Просто хотел уточнить насчет того где задаётся тип содержимого и влияет ли он на поведение браузера (см. пост № 23) |
а-а, задавать его с помощью тэга meta можно разве что на всякий случай, а вообще Content-Type - это заголовок и его можно задавать в настройках apache, добавлять к ответу с помощью функции header (php) и т.д.
|
Часовой пояс GMT +3, время: 16:58. |