当MIMEtypes由服务器设置时,为什么写<script type =“text / javascript”>?
我的理解是,MIMEtypes是由Web服务器设置的。 为什么我们添加type="text/javascript
或type="text/css"
属性?这不是一个无用的和被忽略的属性吗?
道格拉斯·克罗克福德说 :
type="text/javascript"
该属性是可选的。 由于Netscape 2是所有浏览器中的默认编程语言,都是JavaScript。 在XHTML中,这个属性是必需的和不必要的。 在HTML中,最好不要使用它。 浏览器知道该怎么做。
他还说:
W3C没有采用
language
属性,而是倾向于使用MIMEtypes的type
属性。 不幸的是,MIMEtypes不是标准化的,所以有时候是"text/javascript"
或者"application/ecmascript"
或者别的什么东西。 幸运的是,所有浏览器都会selectJavaScript作为默认的编程语言,所以最好只写<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
属性,但它使用它,你最好使用一个合法的(依赖于浏览器的)值。
因为至less在HTML 4.01和XHTML 1(.1)中, <script>
元素的type
属性是必需的 。
在HTML 5中 ,不再需要input。
实际上,虽然您应该在HTML源代码中使用text/javascript
,但许多服务器将使用Content-type: application/javascript
发送文件。 在RFC 4329中详细了解这些MIMEtypes。
请注意RFC 4329之间的区别,即标记为过时的text/javascript
,并build议使用application/javascript
,以及某些浏览器在包含type="application/javascript"
<script>
元素而不是发送文件的HTTP内容types头)。 最近在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 (eg 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. } }
它允许浏览器在请求脚本或样式表之前确定它们是否可以处理脚本/样式语言(或者在embedded脚本/样式的情况下,识别正在使用哪种语言)。
如果在浏览器空间中的语言之间有更多的竞争,这将更加重要,但VBScript从来没有超越IE,PerlScript从来没有超越IE特定的插件,而JSSS是非常垃圾的开始。
HTML5草稿使属性成为可选项。