我应该在SCRIPT标签中包含type="text/javascript"吗?

21

我阅读了Crockford的JavaScript最佳实践,他指出:

没有必要使用语言或类型属性。服务器而不是脚本标签决定MIME类型。

但我从未见过有人省略他们的<script>标签中的type属性......

你们是否包括type?为什么(不)?


你有参考的最佳实践链接吗? - Darryl Hein
6个回答

11

你误解了Crockford的意思,他并没有说type属性是完全无效的,只是不正确而已。JavaScript的MIME类型是application/javascript(或者application/ecmascript我现在记不清了)。

一般来说,text/javascript是通用使用的,因为浏览器处理起来没有问题,这已经成为事实标准很长时间了。

关于<script src="..."标签,它是多余的,因为服务器会确定文件的MIME类型,然后浏览器会处理它。

Crockford在YUI Theater的一个视频中最好地解释了这个问题(http://developer.yahoo.com/yui/theater/)。我不记得具体是哪一个视频谈到了这个问题,我想它应该是高级JavaScript系列(但是是的,我已经多次观看了所有视频,所以它们有点混乱)。

因此,如果你想编写有效的XHTML,你需要提供类似text/javascript的内容,但它并不是JavaScript语言的官方MIME类型。


1
值得注意的是,Internet Explorer不会识别将"type"属性指定为"application/javascript"的脚本 - 它只能识别"text/javascript" :-( - NickFitz
哪个IE版本?标准是在2007年左右才确定的。 - Aaron Powell
https://dev59.com/SXM_5IYBdhLWcg3wp06l - Esteban Küber

8
如果脚本嵌入在页面中,则Crockford的建议不相关。如果您想编写符合标准的HTML,那么它仍然无关紧要。他通常对JavaScript的所有内容都非常准确,因此他可能只是给您一些背景信息,而不是告诉您该怎么做。点击链接后,该页面略显陈旧。例如:应该尽可能晚地将“<script src=filename.js>”标签放在body中,以减少脚本加载对其他页面组件造成的影响。现代的方法是使用jQuery(或类似的样式)在文档加载时执行处理,这自动解决了该问题,使您可以将脚本标记放置在逻辑上有意义的任何位置。

9
尽可能晚地将SCRIPT放置在BODY中的建议仍然很重要。请参见http://developer.yahoo.com/performance/rules.html#js_bottom。 - Gumbo
@Gumbo:如果使用jQuery这样的库,是否仍然有必要等到文档完全加载后再加载脚本?看起来这个建议只适用于“老派”的脚本放置方式,在DOM中到达时才会加载脚本。 - peirix
1
@Gumbo - 我并不认为这是一个重要的问题。首先,一个JavaScript-heavy的页面可能在某些脚本运行完成之前没有任何用处,因此它看起来准备好了,但实际上并没有什么价值。其次,如果您使用外部脚本文件,它只会在第一次访问页面时下载,并在此后被缓存,因此不值得担心下载成本。 - Daniel Earwicker
2
@Earwicker,你必须在使用其ready事件之前加载jQuery,然后将jQuery放置在页面末尾。而且我敢打赌,如果你正在使用jQuery UI,你实际上不会在ready事件之后添加脚本节点,对吧? - Ionuț G. Stan
@Gumbo - 这是极具争议的,实际上有更好的方法来实现所需的结果,但它们在技术上更加困难。 - annakata

6
HTML5规范指定默认的typetext/javascript...因此在实际编写JavaScript脚本的所有情况下,您都可以在HTML5中将其留空。有关更多信息,请参见规范
在HTML4中,如果您担心HTML是否“有效”,则type属性是必需的,因此在这种情况下应包含它。显然,如果Crockford表示不需要该属性,则在此情况下无明显缺点使HTML无效。

4

我使用type属性,因为它是有效HTML所必需的。但实际上,它并没有任何作用。


2

type属性对于HTML和XHTML的验证是必需的,因此我总是写它


0

我也会使用type属性,因为有时在Firefox中JavaScript代码无法正常工作。通过使用它,我解决了一些浏览器兼容性问题。


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