HTML5shiv只在HEAD部分起作用?

3
为了尽可能地保持网站速度快,我更喜欢在文档末尾、紧邻结束 body 标记前加载 .js 脚本,将 css 保留在 HEAD 部分。 然而,我发现下面的 html shiv 代码只有在实例化于 HEAD 部分时才有效。
<!--[if lt IE 9]>
    <script type="text/javascript" 
        src="http://html5shiv.googlecode.com/svn/trunk/html5.js">
    </script>
<![endif]-->

有人知道解决方法吗?

2个回答

19

Google Code不是CDN。请勿在trunk中链接文件。

查看响应标头:

Google code is NOT a CDN

缓存在3分钟后过期...这与我们从CDN所想要的完全相反。

请停止这样做。

注意

正如João Cunha所评论的那样,您可以在cdnjs.com上找到真正的CDN链接:html5shiv。(respond.js也可以在那里找到)

示例:

<!--[if lt IE 9]>
<script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.2/html5shiv.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/respond.js/1.4.2/respond.js"></script>
<![endif]-->

在 Stack Overflow 上有一个很好的回答。我刚刚发现了10多个 Google Code 的 html5shiv 链接,但我不知道它会过期得这么快。 - Sam
如果有人对这个答案感到困惑,就像我最初一样,我猜这是作为已接受答案的补充而意图的,因为单独看它似乎在回答完全不同的问题。(虽然我不确定为什么提到了respond.js。) - BoltClock
我提到respond.js是因为这两个脚本是经典组合。 - Lionel Gaillard
也许W3C也应该修复这个页面(看起来像是一个维基,但我还没有尝试过是否允许更改)- https://www.w3.org/community/webed/wiki/HTML5_Shiv(毕竟那些在网上的文章和网站中建议使用的Google URL现在都已经失效了)。 - George Birbilis

14
HTML5 shiv的工作方式需要将其放置在<head>元素中。实际上,在项目页面中已经明确说明:

为使用此脚本,必须将其包含在<body>元素之前(即在<head>中),但无论CSS出现在此脚本之前还是之后都没有关系——但出于性能考虑,最好先包含CSS,然后再包含此脚本。

这样IE就可以在开始构建文档主体之前识别HTML5元素。

没有解决方法。

这里的教训不是过分纠结于将所有脚本放在页面末尾。CDN非常快速地提供服务,因此您不需要移动此特定脚本。1


1 但是正如其他人提到的那样,由于Google Code实际上不是CDN,因此您应该选择另一个来源。


谢谢BC,我只是想确保自己没有漏掉什么。 - RegEdit
我也错过了这部分,将其移到头部标签中后,在IE8中一切都完美地工作了。 - Brendan Vogt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接