您是否需要在<script>标记中指定的文本/ javascript?


157

我读的地方,你不再需要的东西像type="text/javascript"和怪异CDATA,并<!--在脚本标记的东西。因此,代替:

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

    //your script here

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

您只需执行以下操作:

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

我不记得在哪里读过这篇文章。我认为这是来自Google或Yahoo工程师的,他们特别提到了哪些浏览器需要这些过时的结构以及原因。任何人都知道这是在谈论什么博客文章/文章,或者有足够的资源来谈论这个话题?


对于新的浏览器,但在较旧的浏览器(如果仍然存在)上,需要<!-->。关于某些应用程序中的类型,如果不省略,则需要正确的类型。
Bakudan的


1
每次打开text/javascript指定的文件时,都会将其删除。是噪音
松饼人

此处的一篇非常相关的文章,在已接受的答案中包含有关HTML5准则的最新信息。
RBT

Answers:


135

请参阅Crockford在<script>标记上的文字,最值得注意的是:

不要将<!-- //-->hack与脚本一起使用。目的是防止脚本在第一代浏览器Netscape 1和Mosaic中显示为文本。多年以来没有必要。<!-- //-->应该表示HTML注释。注释应该被忽略,而不是编译和执行。此外,HTML注释也不应包含在内--,因此递减的脚本会出现HTML错误。

...

type="text/javascript"

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


75
需要不必要?我想念什么吗?
2013年

17
@Izkata,它是验证所必需的,但没有任何作用。
bdukes

14
“浏览器知道该怎么办”……暂时。下周,当RubyScript(我以这个例子为例)普及并且每个人都脚以采用它时,情况又如何呢?这是一种短视思维,使人们将其文件命名为“ _new”,并使其他人困惑多年。是“ _new”吗?还是“ _new_new”?还是“ _newer”?IMO这是近视的。
Slobaum

18
@ Slobaum,HTML5规范指出它默认为JavaScript。如果有新的脚本类型,则只能在支持规范默认值的新浏览器版本中实现。
bdukes

8
如果RubyScript变得流行,它将结束.rbscript并且浏览器将采取相应的措施。
柯克·斯特罗贝克

45

这是克罗克福德的建议。我知道我已经在其他地方看到了它的回声(也许是ppk?)。HTML5规范不需要它。

奇怪的是,它已经成为有些AU柯朗使用“类型”属性来标记<script>你块希望进行评估:

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

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


我无法完全理解。请解释,这type="text/html"意味着什么,这意味着什么text/javascript..谢谢
T.Todua '16

4
@tazotodua“ text / html”的含义不是很重要;重要的是它不是 “ text / javascript”,浏览器将完全忽略该<script>块的内容。但是,<script> 它将成为DOM的一部分,因此其他JavaScript代码可以找到它们并提取其内容。
Pointy 2016年

这是一个有趣的技巧。虽然不知道我会用它做什么。
brennanyoung

2
w3schoolsIn HTML5, the type attribute is no longer required for JavaScript. The default value is "application/javascript".
Amin Soheyli

19

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

CDATA 如果脚本中包含任何HTML字符(例如“ <”和“>”),则仅适用于XHTML页面。

<!-- 仅对于旧浏览器才需要。



3

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

根据HTML 4.01规范

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

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

类型属性给出了数据的脚本或格式的语言。如果存在该属性,则其值必须是有效的MIME类型。不能指定charset参数。如果属性不存在,则使用默认值,即“ text / javascript”。


1
换句话说,忽略它可能会在不支持HTML5的旧浏览器中导致错误
Serge

2

您可能会在这里想到这篇文章,其依赖关系是脚本会自动默认为HTML5中的text / javascript,而非HTML5浏览器仍然希望您以特定的方式定义类型,即使他们几乎总是会猜测text / javascript 。


1

script我认为取决于浏览器根据标题(而不是type属性)正确解释该块。因此,要回答您的问题,不,现代浏览器不需要(我说的是IE7 +,FF,Webkit)。如果您支持的浏览器版本早于此版本...我为您感到抱歉=)


2
别忘了中国拥有385+百万用户,其中许多用户仍使用IE6。netmarketshare.com/...
chainwork

3
了解中国的严格互联网政策,您的网站可能永远无法访问它们= P
hellatan

问题是有关内联脚本的,因此除主页(可能是某些HTML内容类型)之外没有其他标题。无论如何,您是否有来源表明浏览器已考虑标头(例如,如果您具有普通的<script src =“ something”> </ script>并提供了VBScript标头,那么是否有任何浏览器会将其解释为VBScript) ?
Matthew Flaschen

1

如果要将脚本标签放入SVG内,则必须指定type属性。而且应该是"text/ecmascript"而不是"text/javascript"

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

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

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

“改变环境到相反的方向,每一个智慧都变成愚蠢之举。” -阿什比


1
好决定。刚刚研究了一些复杂的SVG,确实如此!
戴夫·埃弗里特

1

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

MIME探查标准允许使用JavaScript任何MIME类型(送达多用途Internet邮件扩展)符合以下几点:

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

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

0

好吧,我一直看到没有文本/ JavaScript的更多示例,但是由于某些原因,当我这样做时,我的脚本无法在FF中运行。我建议保留text / javascript声明。如果浏览器已关闭javascript,则CDATA标记可防止javascript在您的网站中显示为纯文本。我个人不使用这些标签,不要认为没有用户分配,如果他们在那里,他们可能会想办法:P


除非您真的想针对真正的古董浏览器,否则type属性和旧的CDATA都不需要。只要您确实使用正确的类型,它们就不会对您造成任何伤害。
Pointy

我正在使用最新的稳定FF版本,并且在没有声明文本/ javascript的情况下似乎难以解析,我使用jQuery btw,但这应该没有什么不同。
迈克尔(Michael)

好吧,我使用简单的脚本标签<script>(没有“语言”和“类型”)运行整个Web应用程序,它们在所有浏览器中都能正常工作。(嗯,所有合理的方法:FF,Chrome,Safari,IE,Opera。)
尖尖的

1
@pointy似乎FatherStorm刚刚发布了为什么会这样的答案。因此您的评论似乎不正确。
迈克尔

@Michael可能是这样,如果您犯了使用XHTML / Strict的错误,可能会遇到问题,但是即使如此,我仍然对此表示怀疑。在JavaScript世界的各行各业中,人们普遍同意“ type”属性是不必要的,并且实际上,由于不良的“ type”会破坏脚本,因此它只是bug的来源。
Pointy

0

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

CDATA :在XHTML中是必需的。

<!--:用于从非常老的浏览器中隐藏JavaScript。例如:Netscape 1和Internet Explorer 2,任何人都不再使用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.