Ну, в современном 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.