为什么在服务器设置mime类型时写<script type =“text / javascript”>?</script>

时间:2010-04-24 21:45:39

标签: javascript html css mime-types

我的理解是mime类型是由Web服务器设置的。我们为什么要添加type="text/javascripttype="text/css"属性?这不是一个无用且被忽略的属性吗?

4 个答案:

答案 0 :(得分:65)

Douglas Crockford says

  

type="text/javascript"

     

此属性是可选的。以来   Netscape 2,默认编程   所有浏览器中的语言都是   JavaScript的。在XHTML中,这个属性   是必要的和不必要的。在HTML中,   最好不要把它拿出来。该   浏览器知道该怎么做。

He also says:

  

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属性,但它是您使用它的更好地使用合法的(依赖浏览器的)价值。

答案 1 :(得分:27)

因为,至少在HTML 4.01和XHTML 1(.1)中,type元素的<script>属性为required

HTML 5中,不再需要type

事实上,虽然您应该在HTML源代码中使用text/javascript,但许多服务器会使用Content-type: application/javascript发送文件。在RFC 4329中了解有关这些MIME类型的更多信息。

请注意RFC 4329之间的区别,标记为text/javascript已过时并建议使用application/javascript,以及某些浏览器对包含{{1}的<script>元素感到惊讶的现实(在HTML源代码中,不是发送文件的HTTP Content-type头)。最近,在WHATWG邮件列表上讨论了这种差异(HTML 5的type="application/javascript"默认为type),请阅读主题为Will you consider about RFC 4329?

的邮件

答案 2 :(得分:13)

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.
   }
}

答案 3 :(得分:5)

它允许浏览器在发出脚本或样式表请求之前确定是否可以处理脚本/样式语言(或者,在嵌入式脚本/样式的情况下,确定正在使用哪种语言)。

如果浏览器领域的语言之间存在更多竞争,这将更加重要,但VBScript从未超越IE,PerlScript从未超越IE特定的插件,而JSSS开始时非常垃圾。

HTML5草案使该属性成为可选项。