Наскільки неправильно розміщувати тег сценарію після закриваючого тегу body ( </body>
). ?
<html>
....
<body>
....
</body>
<script type="text/javascript" src="theJs.js"></script>
</html>
Наскільки неправильно розміщувати тег сценарію після закриваючого тегу body ( </body>
). ?
<html>
....
<body>
....
</body>
<script type="text/javascript" src="theJs.js"></script>
</html>
Відповіді:
Він не перевірятиметься поза тегами <body>
або <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 все ще терплять їх, але є ймовірність, що колись вони відкинуть це як нестандартне.
Процедурно вставляти "сценарій елемента" після "body element" є "помилка синтаксичного аналізу" за рекомендованим процесом W3C . У "Конструкції дерева" створіть помилку та запустіть "tokenize again" для обробки цього вмісту. Тож це як додатковий крок. Тільки тоді можна запустити "Виконання сценарію" - див. Схему процесу .
Інше "помилка синтаксичного аналізу". Переключіть «режим вставки» на «в тілі» та обробіть маркер.
Технічно за допомогою браузера це внутрішній процес, як вони його позначають та оптимізують.
Сподіваюся, я комусь допоміг.
Так. Але якщо ви все-таки додасте код за його межами, швидше за все, це не буде кінцем світу, оскільки більшість браузерів це виправлять, але все одно це погана практика.
Google насправді рекомендує це щодо "оптимізації CSS". Вони рекомендують вставляти критичні стилі, що перевертаються, та відкладати решту (файл 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>
.