при загрузке HTML-документа с использованием AJAX, что он делает с узлами внутри тега HEAD: (скрипт, ссылка, стиль, мета, заголовок)
Это зависит от того, как вы делаете загрузку. ajax()
(как и в случае XMLHttpRequest, на котором оно основано) просто дает вам строку. Как вы получаете это в документе?
Если вы запишите эту строку в innerHTML
элемента, сценарии внутри него не будут выполняться. Это нигде не стандартизировано, но все популярные в настоящее время браузеры ведут себя таким образом.
Однако, если вы затем вставите этот элемент в документ (независимо от того, был ли он уже внутри документа ранее или нет), будет выполняться во многих браузерах при первом запуске. В IE сценарий будет выполняться, когда вы непосредственно вставляете элемент сценария в любой элемент , будь то документ или нет.
Это все очень противоречиво и неудобно, поэтому вам следует избегать AJAX-загрузки <script>
элементов в документе. В любом случае, обычно нет веской причины; лучше сохранить статический код сценария и использовать JSON (или eval
только в случае крайней необходимости) для передачи им данных сценария.
Функция jQuery load
пытается компенсировать различия в браузере при AJAX-загрузке содержимого в документ. Он не может охватить все обстоятельства, связанные с <script>
(есть некоторые действительно странные). Вы не должны полагаться на это, в общем. Вы можете избежать ответа на HTML-страницу, но затем загрузить только определенные элементы без <script>
, потому что это только делает шаг write-to-innerHTML. Но опять же, вы действительно не хотите полагаться на это. Намного лучше, чтобы сервер возвращал фрагмент HTML или JSON, который ваши скрипты могут использовать напрямую.
Что касается таблиц стилей и ссылок на таблицы стилей, то их вставка в тело обычно работает, хотя, с точки зрения HTML, это, вероятно, не должно. meta
и title
ничего не сделают, для них уже слишком поздно оказывать влияние. Просто анализ их с помощью innerHTML
ничего не сделает, но, тем не менее, избегайте этого, если можете.