是否需要在 < script > 标记中指定 text/javascript?

我在哪里读到,你不再需要像 type="text/javascript"和怪异的 CDATA<!--的东西在你的脚本标签。所以,不是:

<script type="text/javascript">
//<![CDATA[
<!--


//your script here


-->
//]]>
</script>

你只需要做:

<script>
//your script here
</script>

不过我不记得在哪里读到的了。我认为这是来自 Google 或者 Yahoo 的工程师,他们特别提到了哪些浏览器需要这些古老的结构以及为什么。有人知道这篇文章是关于什么博客文章的吗? 或者有什么好的资源来讨论这个问题吗?

48511 次浏览

这是 克罗克福德的推荐信。我知道我已经看到它在其他地方回响(也许公平?).HTML5规范并不要求它。

奇怪的是,使用“ type”属性来标记 不要想要计算的 <script>块变得有些 当然:

<script type='text/html-template'>
<div> this is a template </div>
</script>

通过提供一个奇怪的非 JavaScript 类型,您可以将原始文本填充到页面中,以供其他 JavaScript 代码使用(可能是在脚本块中计算 可以)。

你可能会想到 这篇文章,它的依赖关系是脚本在 HTML5中自动默认为 text/javascript,而非 HTML5的浏览器仍然希望你明确地定义类型,即使它们几乎总是猜测 text/javascript。

我一直看到更多没有 text/javascript 的例子,但是由于某些原因,我的脚本不能在 FF 中工作,当我这样做的时候。我建议保留 text/javascript 声明。如果你的浏览器关闭了 javascript,CDATA 标签可以防止 javascript 以纯文本的形式出现在你的网站上。就我个人而言,我不再使用这些标签了,不认为有很多用户没有,如果他们在那里,他们可能想要增长一些大脑: P

HTML5不需要 type="text/javascript"(它是默认的)。

如果脚本中包含任何 HTML 字符(如“ <”和“ >”) ,那么只需要对于 XHTML 页面使用 CDATA

<!--应该只适用于老式浏览器。

我相信,正确解释 script块取决于浏览器的标题,而不是 type属性。所以,为了回答你的问题,不,它不是现代浏览器所必需的(我说的是 IE7 + ,FF,Webkit)。如果你支持比那更老的浏览器... ... 我为你感到难过 =)

参见 克罗克福德对 <script>标签的报告,最值得注意的是:

不要将 <!-- //-->代码与脚本一起使用。这是为了防止脚本显示为文本在第一代浏览器 Netscape 1和 Mosaic。已经很多年没有这个必要了。<!-- //-->应该是 HTML 注释的信号。注释应该被忽略,而不是编译和执行。此外,HTML 注释不包括 --,因此递减的脚本有一个 HTML 错误。

...

type="text/javascript"

此属性是可选的。自 Netscape 2以来,所有浏览器中的默认编程语言都是 JavaScript。在 XHTML 中,此属性是必需且不必要的。在 HTML 中,最好省略它。浏览器知道该怎么做。

好吧,我忍不住想说,没有人再使用 text/javascript,甚至缩小工具可能会删除它..。 事实上,Facebook SDK 文档只指定 <script>

但是, Google SDK 文档 仍然有 text/javascript

Amazon SDK 文档 仍然有 text/javascript

Linkedin API 文档 仍然有 text/javascript

Instagram 仍在使用 text/javascript

< a href = “ https://developer.mozilla.org/en/docs/Web/HTML/Element/script”rel = “ nofollow”> type 属性标识嵌入在 script 元素中或通过元素的 src 属性引用的代码脚本语言。这被指定为 MIME 类型; 支持的 MIME 类型的例子包括 text/javascript、 text/ecmascript、 application/javascript 和 application/ecmascript。

根据 HTML 4.01规格

类型属性指定元素的脚本语言 内容并重写默认脚本语言 语言指定为内容类型(例如,“ text/javascript”)。 作者必须为此属性提供一个值。没有默认值 属性的值。

但是在 HTML5text/javascript是默认类型,所以可以省略

属性提供脚本的语言或 如果该属性存在,则其值必须是有效的 MIME 字符集参数不能指定 如果该属性不存在,则使用“ text/javascript”。

type="text/javascript": 在 HTML4和 XHTML 中是必需的,但在 HTML5中是可选的。

CDATA: XHTML 中必需的。

<!--: 用于在非常老的浏览器中隐藏 JavaScript。例如: 网景1和 Internet Explorer 2,没有人再使用它们了。

如果放置脚本标记 在 SVG 内部,则 必须的指定 type 属性。它应该是 "text/ecmascript"而不是 "text/javascript"

如果您的脚本是内联的(没有链接) ,那么您还需要将脚本体包装在 CDATA 声明中。因此,SVG(和其他 XML 变体)的内联脚本样板如下

<script type="text/ecmascript">
<![CDATA[
// your javascript code goes here
]]>
</script>

这些可能是“在野外”的特殊情况,但它们是真实的,SVG 的使用正在增长,因此,任何其他人都不应该认为 type 属性和 CDATA 在现代浏览器中已经完全过时。用例是狭窄的,是的,但并非闻所未闻。

“把环境改变成它的对立面,那么每一个智慧都会变成最愚蠢的事情。”——阿什比

HTML5规范敦促作者省略该属性,而不是提供冗余的 MIME 类型。 MDN

MIME 嗅探标准允许 JavaScript 使用任何与以下匹配的 MIME 类型(MIME)提供服务:

<script type="application/javascript"></script>
<script type="application/ecmascript"></script>


<script type="text/javascript"></script>
<script type="text/ecmascript"></script>