Почему JS-скрипт, размещенный после </body> и </header>, выполняется? - PullRequest
3 голосов
/ 12 февраля 2012

Я работал над чем-то в PHP и хотел включить файл и вставить что-нибудь в конце.Не думая об этом, я включил, а затем повторил материал, который я хотел вставить, который представлял собой сценарий JS.

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

Если бы вы спросили меня до того, как я это сделаю, будет ли выполняться скрипт после тегов и, я бы сказал:не думаю. "Я бы сказал, что думал, что он не будет выполняться, потому что до сих пор предполагал, что что-либо после тегов и игнорируется браузерами.

Итак, если бы вы спросили, я бы дал этот ответ, и ябыло бы совершенно неправильно.

Сценарий, размещенный после тегов и, действительно выполняется - почему?

Я пробовал его с FF 3.6.24 и IE 8.0.7601.17514, и он ведет себя так жев обоих.

Любой текст после тегов и отображается - почему?

Есть ли у кого-нибудь какие-либо мысли по этому поводу?И могу ли я на это положиться?Если это так, я могу упростить некоторую обработку здесь и там.

Вот страница, с которой я играл http://www.bobnovell.com/PastHtmlEndTesting.shtml - дайте мне знать, если ваш конкретный браузер не выполняет сценарий, и / или не отобразитетекст, который я поместил после сценария.

Боб

1 Ответ

5 голосов
/ 12 февраля 2012

Это хорошо определенное поведение в HTML5, хотя оно будет помечено валидатором HTML5.

Режим вставки после тела определяет, что происходит с контентом, который находится после тега </html>. Правило, которое обрабатывает этот случай:

Все остальное

error Ошибка разбора. Переключите режим вставки на "in body" и повторно обработайте токен.

Технически, это ошибка разбора, но с четко определенным поведением. Элемент <script> анализируется и выполняется так, как если бы он появился в теле, и элемент должен появляться в DOM в теле.

Большинство браузеров не будут воспринимать "ошибки разбора" как фатальные. HTML 5 spec объясняет:

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

...