打印

BT9005: 只有 IE 的脚本引擎支持 VBScript

作者:武利剑

标准参考

脚本使用的语言由 SCRIPT 标签的 'type' 属性指定,该属性大小写不敏感,在 HTML 4.01 规范中,该属性没有默认值,而在 HTML 5 草案中,该属性的默认值为 'text/javascript'。

SCRIPT 标签的 'language' 属性已被废弃,推荐使用 'type' 来代替。

关于 SCRIPT 标签的更多信息,请参考 HTML 4.01 规范 18.2.1 The SCRIPT element 及 HTML5 草案 4.3.1 The script element 中的内容。

问题描述

IE 的脚本引擎不仅支持 JScript1 语言,还同时支持 VBScript。其他浏览器均不能使用 VBScript。

注1:JScript 是 ECMAScript 的微软实现版,类似其他浏览器的 JavaScript,但有些细节上有差异。

造成的影响

如果在 SCRIPT 标签中指定脚本语言为 VBScript,在非 IE 浏览器中将无法运行。

受影响的浏览器

IE6 IE7 IE8  

问题分析

Windows Script Host(简称 WSH ),是 Windows 操作系统脚本语言程序(script)的运行环境。它被内建到 Microsoft Windows 98 及以后的 Microsoft Windows 版本中。

WSH 是一种跨语言宿主,它会为宿主脚本创建一个宿主环境,在该宿主环境中提供一个公共的对象系统,并提供装载不同编程语言引擎的能力。因此,WSH 可以让多个语言使用同一套对象————这些对象有一些 COM 组件来实现并注册到 Windows 系统中。

Microsoft Internet Explorer 也使用了这个技术。因此,在 IE 中,页面里的 JScript 和 VBscript 的对象可以通信。

关于 WSH 的更多信息,请参考 MSDN 中的 MicroSoft Windows ScriptWhat Is WSH? 或维基百科中的 Windows Script Host 中的内容。

分析以下代码:

<script type="text/vbscript"> a = 1 </script> <script
                type="text/javascript"> document.write(typeof a);
                </script>
  • type="text/vbscript" 有时也被书写为 language="vbscript",但 language 标签已被废弃,不推荐使用。另外要注意 VBScript 仅 IE 支持。
  • type="text/javascript" 有时也被书写为 language="javascript"。同上,不推荐使用 'language' 属性。
  • 如果把 'javascript' 换成 'jscript' 则有其他的兼容性问题:Firefox 不能识别这种写法。

这段代码在不同的浏览器环境中的表现:

IE6 IE7 IE8 Firefox Safari Chrome Opera
number number number undefined undefined undefined undefined

可见,VBScript 仅能运行在 IE 中。

解决方案

避免使用 VBScript,使用 JavaScript 书写页面上的脚本。

参见

知识库

相关问题

测试环境

操作系统版本: Windows 7 Ultimate build 7600
浏览器版本: IE6
IE7
IE8
Firefox 3.6
Chrome 4.0.302.3 dev
Safari 4.0.4
Opera 10.60
测试页面:  
本文更新时间: 2010-07-05

关键字

SCRIPT type language JScript VBScript