Насколько неправильно размещать тег script после закрывающего тега body ( </body>
). ?
<html>
....
<body>
....
</body>
<script type="text/javascript" src="theJs.js"></script>
</html>
Насколько неправильно размещать тег script после закрывающего тега body ( </body>
). ?
<html>
....
<body>
....
</body>
<script type="text/javascript" src="theJs.js"></script>
</html>
Ответы:
Он не будет проверен вне тегов <body>
or <head>
. Это также не будет иметь большого значения - если вы не выполняете DOM-манипуляции, которые могут сломать IE до полной загрузки элемента body, - чтобы поместить его непосредственно перед закрытием </body>
.
<html>
....
<body>
....
<script type="text/javascript" src="theJs.js"></script>
</body>
</html>
<script src="..." defer>
, который работает во всех основных браузерах (хотя с потенциально опасной ошибкой в IE9 и ниже).
Да. Только комментарии и конечный тег для элемента html допускаются после конечного тега для тела.
Браузеры могут выполнять восстановление после ошибок, но вы никогда не должны зависеть от этого.
Как сказал Энди, документ будет недействительным, но, тем не менее, сценарий все равно будет интерпретирован. Смотрите фрагмент из WebKit, например:
void HTMLParser::processCloseTag(Token* t)
{
// Support for really broken html.
// we never close the body tag, since some stupid web pages close it before
// the actual end of the doc.
// let's rely on the end() call to close things.
if (t->tagName == htmlTag || t->tagName == bodyTag
|| t->tagName == commentAtom)
return;
...
IE больше не позволяет этого (начиная с версии 10, я полагаю) и будет игнорировать такие сценарии. FF и Chrome все еще терпят их, но есть вероятность, что когда-нибудь они откажутся от этого как от нестандартного.
Процедурно вставить «скрипт элемента» после того, как «тело элемента» является «ошибкой синтаксического анализа» по рекомендованному W3C процессу . В «Tree Construction» создайте ошибку и запустите «tokenize again» для обработки этого содержимого. Так что это как дополнительный шаг. Только тогда может быть запущено «Выполнение скрипта» - см. Схему процесса .
Все остальное "ошибка разбора". Переключите «режим вставки» на «в теле» и повторно обработайте токен.
Технически в браузере это внутренний процесс, как они маркируют и оптимизируют его.
Я надеюсь, что я кому-то помог.
Да. Но если вы добавите код за его пределы, скорее всего, это не конец света, так как большинство браузеров исправят его, но все равно это плохая практика.
Google фактически рекомендует это в отношении «CSS Optimization». Они рекомендуют встраивать критические стили выше сгиба и откладывать остальное (файл CSS).
Пример:
<html>
<head>
<style>
.blue{color:blue;}
</style>
</head>
<body>
<div class="blue">
Hello, world!
</div>
</body>
</html>
<noscript><link rel="stylesheet" href="small.css"></noscript>
См .: https://developers.google.com/speed/docs/insights/OptimizeCSSDelivery.
body
элемента. Эта статья Google никому не советует делать подобные вещи.
Современные браузеры принимают теги сценариев в теле следующим образом:
<body>
<script src="scripts/main.js"></script>
</body>
По сути, это означает, что скрипт будет загружен после завершения страницы, что может быть полезно в некоторых случаях (а именно, манипулирование DOM). Тем не менее, я настоятельно рекомендую вам взять тот же сценарий и поместить его в тег head с помощью defer, поскольку он даст тот же эффект.
<head>
<script src="scripts/main.js" defer></script>
</head>
script
тегов был event
атрибут, который можно было бы определить, чтобы определить, когда анализировать скрипт. Таким образом, у вас есть event="load" event="DOMContentLoaded"
для запуска сценария после создания DOM или event="beforeunload"
по beforeunload
событию окна . Пример <script src="scripts/main.js" event="DOMContentLoaded"></script>
.