我的理解是 MIME 类型是由 Web 服务器设置的。为什么要添加type="text/javascript
ortype="text/css"
属性?这不是一个无用且被忽略的属性吗?
为什么要在服务器设置 mime 类型时编写 <script type="text/javascript"> ?
type="text/javascript"
该属性是可选的。从 Netscape 2 开始,所有浏览器的默认编程语言都是 JavaScript。在 XHTML 中,这个属性是必需的,也是不必要的。在 HTML 中,最好将其排除在外。浏览器知道该做什么。
W3C 没有采用该
language
属性,而是倾向于type
采用 MIME 类型的属性。不幸的是,MIME 类型没有标准化,所以它有时"text/javascript"
或"application/ecmascript"
或其他东西。幸运的是,所有浏览器都会选择 JavaScript 作为默认编程语言,因此最好只编写<script>
. 它是最小的,适用于大多数浏览器。
仅供娱乐,我尝试了以下五个脚本
<script type="application/ecmascript">alert("1");</script>
<script type="text/javascript">alert("2");</script>
<script type="baloney">alert("3");</script>
<script type="">alert("4");</script>
<script >alert("5");</script>
在 Chrome 上,除了脚本 3 ( type="baloney"
) 之外的所有内容都可以工作。IE8 没有运行脚本 1 ( type="application/ecmascript"
) 或脚本 3。根据我对两个浏览器的非广泛示例,看起来您可以安全地忽略该type
属性,但是如果您使用它,您最好使用合法的(依赖于浏览器的)值。
因为,至少在 HTML 4.01 和 XHTML 1(.1) 中,元素的type
属性<script>
是必需的。
在HTML 5 中,type
不再需要。
事实上,虽然您应该text/javascript
在 HTML 源代码中使用,但许多服务器会发送带有Content-type: application/javascript
. 在RFC 4329 中阅读有关这些 MIME 类型的更多信息。
请注意 RFC 4329(标记text/javascript
为过时并推荐使用application/javascript
)与某些浏览器对<script>
包含的元素type="application/javascript"
(在 HTML 源中,而不是发送的文件的 HTTP 内容类型标头)上的元素感到恐慌的现实之间的区别。最近,在 WHATWG 邮件列表上有一个关于这个差异的讨论(HTML 5 的type
默认为text/javascript
),请阅读这些主题为您会考虑 RFC 4329 的邮件吗?
Boris Zbarsky(Mozilla),他可能比其他任何人都更了解 Gecko 的内脏,在http://lists.w3.org/Archives/Public/public-html/2009Apr/0195.html提供了下面重复的伪代码来描述基于 Gecko 的浏览器做什么:
if (@type not set or empty) {
if (@language not set or empty) {
// Treat as default script language; what this is depends on the
// content-script-type HTTP header or equivalent META tag
} else {
if (@language is one of "javascript", "livescript", "mocha",
"javascript1.0", "javascript1.1",
"javascript1.2", "javascript1.3",
"javascript1.4", "javascript1.5",
"javascript1.6", "javascript1.7",
"javascript1.8") {
// Treat as javascript
} else {
// Treat as unknown script language; do not execute
}
}
} else {
if (@type is one of "text/javascript", "text/ecmascript",
"application/javascript",
"application/ecmascript",
"application/x-javascript") {
// Treat as javascript
} else {
// Treat as specified (e.g. if pyxpcom is installed and
// python script is allowed in this context and the type
// is one that the python runtime claims to handle, use that).
// If we don't have a runtime for this type, do not execute.
}
}
它允许浏览器在请求脚本或样式表之前确定它们是否可以处理脚本/样式语言(或者,在嵌入式脚本/样式的情况下,确定正在使用哪种语言)。
如果浏览器领域的语言之间存在更多竞争,这将变得更加重要,但是 VBScript 从未超越 IE,而 PerlScript 从未超越 IE 特定插件,而 JSSS 一开始就相当垃圾。
HTML5 草案使该属性可选。