有没有人知道 HTA 文件使用的 JavaScript 版本是什么。
我正在创建一些脚本文件,并尝试使用 Object.defineProperty
.
当以 HTA 运行时,它会报错,指出 Object 不支持此属性或方法。 我已经将其作为 HTM 文件运行以进行检查,并且根本没有任何问题。
因此,我只能假设 mshta.exe
正在使用旧版本的 JavaScript 引擎。 有人能够确认吗?
有没有人知道 HTA 文件使用的 JavaScript 版本是什么。
我正在创建一些脚本文件,并尝试使用 Object.defineProperty
.
当以 HTA 运行时,它会报错,指出 Object 不支持此属性或方法。 我已经将其作为 HTM 文件运行以进行检查,并且根本没有任何问题。
因此,我只能假设 mshta.exe
正在使用旧版本的 JavaScript 引擎。 有人能够确认吗?
JavaScript(或JScript)的版本取决于三个因素:安装的Internet Explorer版本、使用的文档类型声明(DTD)以及x-ua-compatible
元标记。
虽然HTA由mshta.exe运行,但IE提供JavaScript和渲染引擎给应用程序使用,因此后面关于JS版本的所有内容都适用于盒模型、定位、CSS等以及可用的API和HTML元素。
如果您在系统中安装了IE11,则可以通过使用<!DOCTYPE html>
和<meta http-equiv="x-ua-compatible" content="ie=edge" />
来使用最新版本的JavaScript。
自然而然地,将content
设置为IE=edge
不会覆盖已安装的旧版IE,而是使用最新可用的模式。您可以使用IE版本号降级应用程序以在较新的IE上运行,而不是使用edge
。
省略DTD应始终使应用程序降级到Quirks模式下运行,在HTA的情况下,这与IE5类似。但是,在这种情况下,可以通过x-ua-compatible
更改文档模式,但至少在IE8和9中存在一些不一致性。如果不需要Quirks模式,则始终最安全使用DTD。
使用DTD,但没有x-ua-compatible
元标记,HTA以IE7标准模式运行(不支持object.defineProperty()
,它在IE9中引入)。
您可以在MSDN上阅读更多有关此主题的信息:HTML应用程序(HTAs)简介
有关JS和CSS的IE版本信息,请参见MSDN:
以下是HTA文件的“安全启动”,当您想使用最新可用版本时:
<!DOCTYPE html>
<html>
<head>
<title>HTA</title>
<meta http-equiv="x-ua-compatible" content="ie=edge" />
// All link, style and script tags, or any code should be placed below the five lines above
您还可以使用 ScriptEngine
函数来查找最新的脚本版本:
ver = ScriptEngine() + ' V ';
ver += ScriptEngineMajorVersion() + '.';
ver += ScriptEngineMinorVersion() + '.';
ver += ScriptEngineBuildVersion();
alert(ver);
请注意,这仅显示浏览器提供的最新版本,文档模式不影响返回值。
window.location
导航到您的HTML文件,而HTML文件将使用适合该页的最新版本的IE。 - Zev Spitz