HTML Multiple Heads - PullRequest
       26

HTML Multiple Heads

6 голосов
/ 28 сентября 2011

ПРИМЕЧАНИЕ: я никоим образом не защищаю несколько голов на странице


Я использую Apache Tiles и у меня есть несколько плиток с собственными головками. Результат Tiles рендерится в HTML-страницу с несколькими заголовками.

Мои вопросы:

  1. Как обрабатывается полученная страница в IE и Chrome? [Оказывается и выглядит успешным]
  2. С APACHE TILES Какова лучшая практика для решения / избежания нескольких голов [для CSS / Javascript] без необходимости требовать, чтобы все страницы использовали одинаковые файлы JS и CSS.

Например, с вопросом два: Допустим, у вас есть следующие страницы: дом, профиль и список галереи. Список галереи имеет модный JQuery + YUI + ... и другие стили. Для большинства пользователей их будут интересовать только домашние страницы и страницы профиля, поэтому зачем замедлять их загрузкой файлов JS и CSS, связанных с Gallery.

Это то, что генерируется

<html>
    <head>
       <title>The Template's Title</title>
    </head>
    <body>
       <head> <script src="javascriptfile.js"/></head> Tile One Content
       <head> <script src="javascriptfile2.js"/></head> Title Two Content
    </body>
</html>

Сгенерированное содержимое запускает скрипт в javascriptfile.js и javascriptfile2. Что я спрашиваю в первом вопросе: лишние головы игнорируются, а содержимое учитывается? они объединены в уровень html / head ? Можно ли включить CSS-файлы во второй или более поздние заголовки? Это создаст ошибку с более строгим DTD?

Ответы [ 4 ]

8 голосов
/ 28 сентября 2011

Ну, в современном Chrome, по крайней мере, можно узнать, что происходит.Chrome использует алгоритм синтаксического анализатора HTML5, который точно описывает, как обрабатывается неверная разметка.Кровавые подробности на http://dev.w3.org/html5/spec/tree-construction.html#parsing-main-inbody

В вашем примере происходит то, что первый <head> в <body> отбрасывается.Затем обрабатывается тег <script src="javascriptfile.js"/>, который является начальным тегом, а не самозакрывающимся тегом, поэтому все последующее, включая все, что выглядит как тег, становится текстовым дочерним элементом элемента script.Ничего не отображается и ни один скрипт не запускается.Если <script src="javascriptfile.js"/> заменено на <script src="javascriptfile.js"></script> и то же самое для <script src="javascriptfile2.js"/>, начальные и конечные теги игнорируются, а элементы сценария не перемещаются.Отображается «Tile One Content Title Two Content» и выполняются сценарии.DTD вообще не имеет значения.

IE немного сложнее понять, так как до IE10 он не использовал алгоритм синтаксического анализатора HTML5, и поэтому его точное поведение остается загадкой.Тем не менее, поверхностный эксперимент, похоже, показывает, что он ведет себя так же, как описано выше.

Хотя некоторые устаревшие браузеры перемещают элементы, которые могут появляться только в голове - например, <link> - в голову, другие браузерынет, и на такое поведение нельзя полагаться.

В общем, лучше держаться подальше от таких конструкций.

Я не знаю о методах работы с Apache Tiles.

6 голосов
/ 28 сентября 2011

Какова цель сделать что-то столь вопиюще недействительным? И почему ты спрашиваешь это, кажется очень неясным.

Мало того, что у вас есть только раздел ONE <head></head> на странице, ни при каких обстоятельствах <head></head> не может быть вложен где-либо внутри раздела <body></body>.

Эта практика не имеет абсолютно никакого смысла ...

( Примечание: Некоторые браузеры игнорируют или перемещают недопустимые теги при создании DOM, что разрушит всю вашу цель сделать это.)

РЕДАКТИРОВАТЬ (на основе комментариев):

Для тех, кто заинтересован во включении тегов <script> в <body>, вы можете узнать больше о конкретных деталях в моем ответе здесь ...

Будет ли проблема с связыванием файлов javascript в теле, а не в заголовке?

2 голосов
/ 28 сентября 2011

Вам не нужны дополнительные головы, чтобы включить дополнительные css / js.Вы можете «встроить» всю <style type="text/css">...</style> часть, и она будет хорошо отображаться.Это подтвердит?Нет, но будет работать нормально.

0 голосов
/ 28 сентября 2011

Как обрабатывается полученная страница в IE и Chrome? [Оказывается и выглядит успешным]

Я не знаю, и я действительно не хочу знать.

Какова лучшая практика для работы с несколькими заголовками [для CSS / Javascript] без необходимости требовать, чтобы все страницы использовали одинаковые JS и CSS.

Не делай этого: -)

Есть ли причина, по которой вы не можете просто включить файлы JS в body / head без дополнительных тегов?

Или добавьте файлы css / js в «обычный» раздел документа head (где это должно быть).

Ну, по крайней мере, вы хотите, чтобы CSS-файлы загружались сразу после начала загрузки страницы. Файлы JS могут (иногда) загружаться в конце HTML.
Например, если файлы JS должны иметь полностью загруженный DOM (например, для доступа к элементам DOM).

Примечание

Извините, это не совсем ответ на ваш вопрос, однако то, что вы делаете, выглядит просто плохо :) И почти наверняка не нужен / будет лучшее решение для него.

...