Неправильно ли поместить тег < script> после тега</body>?

Как неправильно размещать тег script после закрытия тега тела (</body>).

<html>
  ....
  <body>
     ....
  </body>
  <script type="text/javascript" src="theJs.js"></script>
</html>

Ответ 1

Он не будет проверять вне тегов <body> или <head>. Это также не будет иметь большого значения. если вы не выполняете манипуляции с DOM, которые могли бы разбить IE, прежде чем элемент body полностью загрузится — чтобы положить его непосредственно перед закрытием </body>.

<html>
  ....
  <body>
     ....
     <script type="text/javascript" src="theJs.js"></script>
  </body>
</html>

Ответ 2

Да. Только комментарии и конечный тег для элемента html разрешены после тега конца для тела.

Браузеры могут выполнять восстановление ошибок, но вы никогда не должны зависеть от этого.

Ответ 3

Как сказал Энди, документ будет недействительным, но, тем не менее, сценарий все равно будет интерпретирован. Смотрите фрагмент из 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 rely on the end() call to close things.
    if (t->tagName == htmlTag || t->tagName == bodyTag 
                              || t->tagName == commentAtom)
        return;
    ...

Ответ 4

IE больше не разрешает (начиная с Версии 10) и игнорирует такие скрипты. FF и Chrome все еще терпят их, но есть вероятность, что когда-нибудь они откажутся от этого как нестандартного.

Ответ 5

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

Ответ 6

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

Ответ 7

Процедурно вставьте "скрипт элемента" после того, как "тело элемента" является "ошибкой синтаксического анализа" по рекомендованному W3C процессу. В "Tree Construction" создайте ошибку и запустите "tokenize again" для обработки этого содержимого. Так что это как дополнительный шаг. Только тогда может быть запущено "Выполнение скрипта" - см. Схему процесса.

Все остальное "ошибка разбора". Переключите "режим вставки" в "в теле" и повторно обработайте токен.

Технически браузером это внутренний процесс, как они маркируют и оптимизируют его.

Я надеюсь, что я кому-то помог.