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

时间:2011-03-10 20:00:38

标签: javascript html

我在某处读到您不再需要type="text/javascript"之类的内容以及脚本代码中奇怪的CDATA<!--内容。所以,而不是:

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

    //your script here

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

你会这样做:

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

我不记得我在哪里读到这个。我认为这是来自谷歌或雅虎工程师,他们特别提到哪些浏览器需要这些古老的结构以及原因。任何人都知道这篇博文/文章是关于什么的,或者有一个很好的资源谈论这个?

11 个答案:

答案 0 :(得分:126)

请参阅Crockford's write-up on the <script> tag,最值得注意的是:

  

不要将<!-- //--> hack与脚本一起使用。它旨在防止脚本在第一代浏览器Netscape 1和Mosaic上显示为文本。多年来一直没有必要。 <!-- //-->应该表示HTML评论。注释应该被忽略,而不是编译和执行。此外,HTML注释不包括--,因此递减的脚本具有HTML错误。

...

  

type="text/javascript"

     

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

答案 1 :(得分:43)

这是Crockford推荐。我知道我已经看到它在其他地方回响(可能是ppk?)。 HTML5规范不要求它。

奇怪的是,使用“type”属性来标记想要评估的<script>块,有点 au courant :< / p>

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

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

答案 2 :(得分:19)

HTML5不需要type="text/javascript"(这是默认设置)。

CDATA仅适用于XHTML页面,如果脚本中包含任何HTML字符(例如'&lt;'和'&gt;')。

只有OLD浏览器才需要

<!--

答案 3 :(得分:3)

type 属性标识嵌入在脚本元素中或通过元素的src属性引用的代码的脚本语言。这被指定为MIME类型;支持的MIME类型的示例包括text / javascript,text / ecmascript,application / javascript和application / ecmascript。

根据HTML 4.01 Specification

  

type 属性指定元素的脚本语言   内容并覆盖默认的脚本语言。脚本   语言被指定为内容类型(例如,&#34; text / javascript&#34;)。   作者必须为此属性提供值。没有默认值   该属性的值。

但是HTML5 text/javascript是默认类型,因此您可以省略

  

类型属性提供脚本的语言或格式   数据。如果该属性存在,则其值必须是有效的MIME   类型。不得指定charset参数。默认,哪个   如果属性不存在,则使用&#34; text / javascript&#34;。

答案 4 :(得分:2)

你可能会想到this article here依赖于脚本默认为HTML5中的text / javascript,而非HTML5浏览器仍然希望你特定地定义类型,即使它们几乎总是猜测文本/ javascript无论如何。

答案 5 :(得分:1)

由浏览器根据标头正确解释script块,我相信,而不是type属性。所以要回答你的问题,现代浏览器不需要它(我说的是IE7 +,FF,Webkit)。如果您支持的是旧浏览器...我为您感到遗憾=)

答案 6 :(得分:1)

好吧,我很想说没有人再使用text/javascript,甚至缩小工具也可能会删除它...... 实际上,Facebook SDK documentation仅指定<script>

然而, Google SDK documentation仍有text/javascript

Amazon SDK documentation仍有text/javascript

Linkedin API documentation仍有text/javascript

Instagram仍在使用text/javascript

答案 7 :(得分:1)

  

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

MIME Sniffing Standard允许使用符合以下条件的任何MIME类型(多用途Internet邮件扩展)来提供JavaScript:

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

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

答案 8 :(得分:0)

嗯,我一直看到没有text / javascript的更多例子,但由于某些原因,当我这样做时,我的脚本不会在FF中工作。我建议保留text / javascript声明。如果您的浏览器关闭了javascript,则CDATA标记会阻止javascript在您的网站中显示为纯文本。我个人不再使用这些标签,不认为有没有用户在那里,如果他们在那里他们可能想要成长一些大脑:P

答案 9 :(得分:0)

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

CDATA:XHTML中必需。

<!--:用于隐藏旧版浏览器中的JavaScript。例如:Netscape 1和Internet Explorer 2,其中任何人都不再使用它。

答案 10 :(得分:0)

如果要在SVG中放入脚本标签 ,则必须指定type属性。它应该是let search = $selector.find('.t130-searchInput').val().trim() if (search) { $input.val(search) store.dispatch({ type: "SET_FORM_FIELD", field: "searchTerm", formName: "search", value: search, key: null, isDirty: true }); $button.click() } 而不是"text/ecmascript"

如果脚本是内联的(未链接的),则也需要将脚本主体包装在CDATA声明中。因此, SVG (和其他XML变体)的内联脚本样板为

"text/javascript"

这些可能是“野外”的特殊情况,但是它们已经足够真实,并且SVG的使用正在增长,因此对于任何其他人来说,建议类型属性和CDATA在现代浏览器中已完全废弃是不正确的。用例很狭窄,是的,但并非闻所未闻。

  

“将环境改变为相反的情况,每一个智慧都变得愚蠢至极。” -阿什比