6

注意:我绝不提倡在一个页面中使用多个头像


我正在使用 Apache Tiles,并且我有一些包含它们自己头部的图块。Tiles 的结果呈现为具有多个头部的 HTML 页面。

我的问题:

  1. 在 IE 和 Chrome 中如何处理生成的页面?[它呈现并显示成功]
  2. 使用 APACHE TILES处理/避免多头 [对于 CSS/Javascript] 的最佳实践是什么,而不必要求所有页面都使用相同的 JS 和 CSS 文件。

例如问题二: 假设您有以下页面:主页、个人资料和画廊列表。图库列表有花哨的 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

4 回答 4

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"/>,开头和结尾标记将被静默丢弃,并且脚本元素不会移动。显示“平铺一内容标题二内容”并运行脚本。DTD 完全没有区别。

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

尽管一些旧版浏览器将只能出现在头部的元素(例如<link>-)移动到头部,但其他浏览器不会,并且不能依赖这样的行为。

总而言之,最好避开此类结构。

我不了解 Apache Tiles 的实践。

于 2011-09-27T22:05:59.640 回答
6

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

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

这种做法绝对没有任何意义......

旁注: 某些浏览器在构建 DOM 时会忽略或移动无效标签,这将破坏您这样做的全部目的。)

编辑(基于评论):

对于任何有兴趣在 中包含<script>标签的人,您可以在此处<body>阅读我的回答中有关具体细节的更多信息...

在正文中而不是在标头中链接 javascript 文件会导致问题吗?

于 2011-09-27T20:50:04.267 回答
2

你真的不需要额外的头来包含额外的 css/js。您可以“内联”整个<style type="text/css">...</style>部分,它会渲染得很好。会验证吗?不,但会运行良好。

于 2011-09-27T20:49:34.043 回答
0

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

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

在不必要求所有页面使用相同的 JS 和 CSS 的情况下,处理多头 [用于 CSS/Javascript] 的最佳实践是什么?

不要这样做:-)

有没有理由你不能只在body/中包含head没有额外标签的 JS 文件?

或者在文档的“正常”部分(应该在的地方)添加css/文件。jshead

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

笔记

抱歉,这并不是您问题的真正答案,但是您正在做的事情看起来很糟糕。:) 而且几乎可以肯定不需要/会有更好的解决方案。

于 2011-09-27T20:49:52.283 回答