HTML脚本标签允许哪些语言类型?

28

我在查看script标签的W3C规范时发现,您可以将VBScript和TCL指定为语言类型。这对我来说非常新颖;我只看到过使用JavaScript与script标签一起使用。

其他语言为什么不常用?是否有可使用于此标签内的完整语言列表?

3个回答

33

你可以在这里放任何想要的东西。这就是 MIME 类型的全部意义

问题当然在于您的用户的浏览器是否能够实际解释它。但这并不是特定于 <script> 元素的。例如,我的浏览器只理解用于样式表的 CSS,而其他浏览器还理解 XSLT。我的浏览器只能理解 HTML、XHTML、HTML5、MathML 和 SVG 用于文档,其他浏览器还理解 PDF 或不理解 MathML。我的浏览器理解 alpha 透明 PNG,而其他浏览器则不支持。在 GIF专利过期之前,有些浏览器不理解GIF格式,而其他浏览器则支付了许可费用(或非法使用专利,或者在禁止软件专利的司法管辖区开发),从而可以理解GIF。一些浏览器理解H.264视频,而其他浏览器则理解Theora。

总的来说,唯一保证所有浏览器都理解的语言是 ECMAScript 第三版。大多数浏览器也理解 JavaScript 的某些子集。

许多版本的 Internet Explorer 理解 VBScript。

CoffeeScript 编译器可以编译为 ECMAScript 并嵌入到网站中,这样您就可以通过 text/coffeescript MIME 类型在页面中使用 CoffeeScript。

有一个名为 HotRuby 的项目,它是用 ECMAScript 编写的 YARV 字节码解释器。这使您可以使用 text/ruby

Microsoft 有一个名为 Gestalt 的项目,它使用 IronRuby 和 IronPython 在 Silverlight 中运行 DLR 来提供对 text/pythontext/ruby(以及可能运行在 DLR 之上的任何语言,例如 Scheme、Smalltalk、PHP、Tcl 等)的支持。

Mozilla 以前有一个名为 IronMonkey 的项目,其中嵌入了多个流行的执行引擎,如 MRI Ruby、CPython、Perl 等,以允许在浏览器脚本中使用所有这些语言。

我记得在某个地方读到过有人构建了一个 tcc(tiny C 编译器)插件,可以使用text/c

就在几天前,Mono的创始人Miguel de Icaza建议将ISO CLI添加到浏览器作为脚本平台,允许您通过application/cil MIME类型使用CIL字节码进行脚本编写。


1
这是一个关于历史参考的精彩回答,但是最新规范实际上规定脚本标签只包含JS或数据块。(浏览器供应商和其他脚本如何使用数据块是另一个问题,可以查看规范中在<script type="text/x-game-map">标签中嵌入游戏地图数据的示例。) - wlnirvana
这似乎是一个非常奇怪的不兼容限制,对于一个非常努力尝试不破坏向后兼容性的规范来说。那么,除了ECMAScript之外,您如何使用其他脚本语言呢? - Jörg W Mittag
1
我怀疑这是否真的是“向后不兼容”的。规范说明作者必须使用有效的MIME类型字符串来表示数据块,该字符串不是JavaScript MIME类型本质匹配,这似乎表明像text/ctext/ruby这样的类型仍然有效 - 只是它们现在被称为“数据块”。然后可能由浏览器或其他脚本处理这些数据块,其中其他脚本语言可能会发挥作用。 - wlnirvana

5

为什么其他语言不常用,是否有一个完整的语言列表可在此标记中使用?

因为JavaScript被所有浏览器支持,而VBS仅受IE支持。

注意:现在language属性已弃用,请仅使用type属性,例如:

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

1
这就是为什么我在我的问题中称之为“语言类型”的原因。虽然这不是技术上正确的短语,但我知道“language”已经被弃用,并且想要传达这一点(尽管很困难)。尽管如此,这是一个重要的提醒,因为该属性已被弃用,但我偶尔仍然会看到它的使用... - Corey

1

您可以指定浏览器可以解释的任何语言,我想。但目前,text/javascript 是所有浏览器唯一支持的语言。

在某些情况下,IE 中提供了 VBScript,并且(显然)仅限于 Windows 和该浏览器。如果要构建可在各种浏览器和平台上运行的网站,则不能选择此选项。我认为您还可以在 IE 中使用 Windows 脚本主机 脚本,但我不熟悉详细信息。

您在哪里看到了 TCL 的实现?这将很有趣。

为了完整起见,PHP 理解 <script language="php"> 标签以指定 PHP 代码块的开始(参考)。在我的意见中,这并不算在您的列表中,因为它在服务器端被捕获和解释,并且它仅支持已弃用的language=语法。


TCL?我从未在任何地方看到过它的使用……然而,W3C页面上有一个例子。这就引起了我的疑问;这非常奇怪。 - Corey
@Corey,你能贴个链接吗?我看不到,我在这里找:http://www.w3.org/TR/REC-html40/types.html#type-script - Pekka
向下滚动一点:http://www.w3.org/TR/REC-html40/interact/scripts.html#h-18.2.2.3 - Corey
@Corey 哦,我在搜索时可能输错了。奇怪!我从未见过TCL支持,至少不是在浏览器中。 - Pekka
这很奇怪。让我想知道是否有关于标签支持哪些语言以及哪些浏览器支持它们的文档。 - Corey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接