2012-02-12 3 views
3

Я работал над чем-то на PHP, и я хотел включить файл и вставить что-то в конец. Не задумываясь об этом, я включил include, а затем повторил материал, который я хотел вставить, который был JS-скриптом.Почему сценарий JS, размещенный после того, как выполнены</body> и</header>?

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

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

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

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

Я пробовал его с FF 3.6.24 и I.E 8.0.7601.17514, и он ведет себя одинаково в обоих случаях.

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

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

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

Боб

+0

Браузер проанализирует весь файл, а не только те теги. – Chad

ответ

5

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

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

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

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

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^