HTA中的JavaScript版本

15

有没有人知道 HTA 文件使用的 JavaScript 版本是什么。

我正在创建一些脚本文件,并尝试使用 Object.defineProperty.

当以 HTA 运行时,它会报错,指出 Object 不支持此属性或方法。 我已经将其作为 HTM 文件运行以进行检查,并且根本没有任何问题。

因此,我只能假设 mshta.exe 正在使用旧版本的 JavaScript 引擎。 有人能够确认吗?

1个回答

22

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:

JavaScript版本信息

Internet Explorer中的CSS兼容性

以下是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);

请注意,这仅显示浏览器提供的最新版本,文档模式不影响返回值。


3
每当我使用 meta 标签时,我的 hta:application 属性就不起作用了。如果我将其注释掉,则它们可以正常工作。有解决方案吗? - ndm13
3
很遗憾,我对此没有一个好的解决方案。似乎自IE10开始,许多HTA属性都不再被应用(在解析后的代码中,“HTA”标签被移动到“body”中)。在IE9中它们仍然被认可。我主要使用“IE=9”而不是“IE=edge”,这至少提供了现代事件处理和大部分HTML5标签,包括“svg”和“canvas”。 - Teemu
2
IE=9 运行得非常完美!我希望这个问题能够在某个时候得到解决,但是很难说,因为他们似乎正在逐步淘汰它。如果下一个版本的Windows不支持HTA文件,我也不会感到惊讶。 - ndm13
@Teemu,然而只有IE11支持flex模块、渐变和其他CSS特性。 - stckvrw
@stckvrw 是的,但是当使用过时的技术时,你必须做出妥协 = )。你必须在现代HTML功能和HTA功能之间做出选择,不幸的是你不能同时得到两者。这也是我回答中的一个主题:“因此,关于JS版本、盒模型、定位、CSS等以及可用的API和HTML元素的所有后续内容都适用。” - Teemu
4
请注意,您可以通过将HTA标记和属性放在一个文件中,并设置"NVAIGABLE=yes",并将您的HTML放在另一个文件中来规避此问题。然后,您可以在HTA中使用window.location导航到您的HTML文件,而HTML文件将使用适合该页的最新版本的IE。 - Zev Spitz

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