HTML多头

时间:2011-09-27 20:40:45

标签: javascript html css cross-browser tiles2


注意:我绝不提倡页面中的多个头


我正在使用Apache Tiles,我有一些包含自己头部的瓷砖。 Tiles的结果呈现为具有多个头的HTML页面。

我的问题:

  1. 如何在IE和Chrome中处理生成的页面? [它呈现并显得成功]
  2. 使用APACHE TILES 处理/避免多个头[CSS / Javascript]的最佳做法是什么,而不必要求所有页面都使用相同的JS和CSS文件。
  3. 例如问题二: 假设您有以下页面:主页,个人资料和图库列表。图库列表有花哨的JQuery + YUI + ...以及更多样式。对于大多数用户来说,他们只对主页和配置文件页面感兴趣,所以为什么要加载与Gallery相关的JS和CSS文件来减慢它们的速度。

    这就是生成的内容

    <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 个答案:

答案 0 :(得分:8)

嗯,在现代Chrome中,至少可以知道会发生什么。 Chrome使用HTML5解析器算法,该算法准确描述了如何处理无效标记。血腥细节在http://dev.w3.org/html5/spec/tree-construction.html#parsing-main-inbody

您的示例中发生的情况是<head>中的第一个<body>被丢弃。然后处理<script src="javascriptfile.js"/>标记,这是一个开始标记,而不是自闭标记,因此后面的所有内容(包括看起来像标记的所有内容)都将成为脚本元素的文本子项。没有显示任何内容,也没有运行脚本。如果将<script src="javascriptfile.js"/>替换为<script src="javascriptfile.js"></script>,并将<script src="javascriptfile2.js"/>替换为d <link>,则会忽略head start和end标记,并且不会移动脚本元素。显示“Tile One Content Title Two Content”并运行脚本。 DTD没有任何区别。

IE有点棘手,因为在IE10之前,它不使用HTML5解析器算法,因此它的确切行为是一个谜。但是,粗略的实验似乎表明它具有与上述相同的行为。

虽然有些旧版浏览器会将只能出现在头部的元素(如{{1}})移到头部,而其他浏览器则不会,并且不会依赖此类行为。

总而言之,最好避开这些结构。

我不知道Apache Tiles的做法。

答案 1 :(得分:6)

做出如此严重无效的事情的目的是什么?为什么你问这个问题似乎很不清楚。

您不仅应该在页面上只有一个 <head></head>部分,在任何情况下,<head></head>都不能嵌套在<body></body>部分的任何位置。

这种做法绝对毫无意义......

旁注:某些浏览器会在构建DOM时忽略或移动无效标记,这会破坏您执行此操作的全部目的。)

编辑(根据评论):

对于有兴趣在<script>中加入<body>代码的任何人,您可以在我的回答here中详细了解具体细节......

Will linking javascript files in the body rather than in the header cause a problem?

答案 2 :(得分:2)

你真的不需要额外的头来包含额外的css / js。您可以“内联”整个<style type="text/css">...</style>部分,它将呈现正常。它会验证吗?不会。但是运行正常。

答案 3 :(得分:0)

  

如何在IE和Chrome中处理生成的页面? [它呈现并显得成功]

我不知道,我真的不想知道。

  

处理多个头[for CSS / Javascript]的最佳实践是什么,而不必要求所有页面使用相同的JS和CSS。

不要这样做: - )

是否有理由不在body / head中包含JS文件而没有额外的标记?

或者在文档的“普通”css部分添加js / head个文件(应该在哪里)。

至少你希望在页面开始加载时加载CSS文件。 JS文件可以(有时)在HTML的末尾加载 例如,如果JS文件需要一个完全加载的DOM(例如访问DOM元素)。

注意

对不起,这不是你问题的真正答案,不过你所做的只是看起来很糟糕。 :)并且几乎肯定不需要/它会有更好的解决方案。