【问题标题】:Should I include type="text/javascript" in my SCRIPT tags?我应该在我的 SCRIPT 标签中包含 type="text/javascript" 吗?
【发布时间】:2013-02-23 05:57:17
【问题描述】:

我阅读了Crockford's JavaScript best practise,他说:

无需使用语言或类型属性。决定 MIME 类型的是服务器,而不是脚本标签。

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

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

【问题讨论】:

  • 您是否有指向您所指的最佳实践的链接?
  • validator.w3.org/… 在“未指定必需属性“TYPE””下

标签: javascript


【解决方案1】:

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

一般的用法是 text/javascript,浏览器可以毫无问题地处理它,因为这一直是 defacto 标准。

关于<script src="..." 标记,它是多余的,因为服务器确定文件的 MIME 类型,而这正是浏览器将处理的内容。

他最好在 YUI 剧院 (http://developer.yahoo.com/yui/theater/) 上的一个视频中解释了这一点。我不记得他具体谈到了哪一个,我认为是在高级 JavaScript 系列中(但是是的,我已经看了好几遍了,所以它们有点相互模糊)。

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

【讨论】:

  • 值得注意的是,Internet Explorer 不会识别为 type 属性指定了“application/javascript”的脚本 - 它只能识别“text/javascript” :-(
  • 哪个 IE 版本?该标准是在 2007 年左右才确定的
【解决方案2】:

如果脚本嵌入在页面中,则 Crockford 的建议不相关。

如果你想编写符合标准的 HTML,那么它仍然不相关。

他通常对与 JavaScript 相关的所有事情都很了解,所以他可能只是给你一些背景信息,而不是告诉你该怎么做。

点击链接后,该页面显示了它的年龄。例如:

<script src=filename.js> 标签应该 尽可能晚地放置在身体中 可能的。这减少了影响 脚本加载造成的延迟 其他页面组件。

“现代”方法是在文档加载后使用 jQuery(或类似样式)执行处理,这会自动解决该问题,允许您将脚本标签放在任何合乎逻辑的地方。

【讨论】:

  • 尽可能晚地将 SCRIPT 放置在 BODY 中的建议仍然适用。见developer.yahoo.com/performance/rules.html#js_bottom
  • @Gumbo:在文档完全加载之前推迟脚本加载是否仍然与 jQuery 之类的库相关?似乎该建议仅与“oldschool”脚本放置相关,当脚本在 DOM 中到达时将被加载。
  • @Gumbo - 我根本不相信这是一个重要的问题。首先,一个 javascript-heavy 页面在某些脚本运行完成呈现之前可能没有任何用处,所以它没有什么价值出现准备好当它不是。其次,如果您使用外部脚本文件,它只会在第一次访问页面时被下载并在之后被缓存,因此几乎不值得担心下载成本。
  • @Earwicker,你必须在使用它的 ready 事件之前加载 jQuery,然后你想把 jQuery 放在页面的末尾。而且我敢打赌,如果您使用的是 jQuery UI,您实际上不会在 ready 事件之后附加脚本节点,对吗?
  • @Gumbo - 这是非常有争议的,实际上有更好的方法来达到预期的结果,但它们在技术上更难
【解决方案3】:

HTML5 规范说默认的 typetext/javascript...所以在 HTML5 中,您可以在所有情况下将其留空,实际上是在使用 Javascript 编写脚本。请参阅the spec 了解更多信息。

在 HTML4 中,type 属性是 required,因此如果您担心拥有“有效”HTML,则应该在这种情况下包含它,显然如果 Crockford 说不需要该属性,则没有明显的缺点在这种情况下无效的 HTML。

【讨论】:

    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

      HTML 和 XHTML 验证需要 type 属性,所以我总是写它

      【讨论】:

        【解决方案6】:

        我还将使用 type 属性,因为有时在 Firefox 中 javascript 代码不起作用。通过使用它,我解决了一些浏览器兼容性问题。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-01-13
          • 2011-06-14
          • 2017-07-25
          • 2020-10-17
          • 2011-10-12
          • 1970-01-01
          • 2011-04-09
          相关资源
          最近更新 更多