HTA中的JavaScript版本

Dar*_*tas 13 javascript version hta defineproperty

有谁知道HTA文件使用的是什么版本的JavaScript.

目前正在创建一些脚本文件 - 并尝试使用 Object.defineProperty

当作为HTA运行时 - 它会错误地指出Object不支持此属性或方法.我将它作为HTM文件运行只是为了检查 - 并且根本没有问题.

所以我只能假设mshta.exe使用较旧的JavaScript引擎.任何人都能证实这一点吗?

Tee*_*emu 17

使用的JavaScript(或JScript)版本取决于三件事:安装的Interner Explorer版本,使用的文档类型声明(DTD)和x-ua-compatible元标记.

虽然HTA由mshta.exe运行,但是IE为应用程序提供了JavaScript和渲染引擎,因此后来关于JS版本的所有内容都代表了盒子模型,定位,CSS等,以及可用的API和HTML元素.

如果您已经安装到你的系统IE11,你可以使用使用最新版本的JavaScript <!DOCTYPE html><meta http-equiv="x-ua-compatible" content="ie=edge" />.

当然,设置contentIE=edge不会覆盖已安装的IE的旧版本,使用最新的可用模式.而不是edge,您可以使用IE版本号在使用较新的IE运行时降级应用程序.

省略DTD应该总是删除应用程序以在Quirks模式下运行,在HTA类似于IE5的情况下.但是,在这种情况下,文档模式可以改变x-ua-compatible,但至少在IE8和9中存在一些不一致.如果不需要Quirks模式,使用DTD总是最安全的.

使用DTD,但没有x-ua-compatible元标记HTA在IE7标准模式下运行(不支持object.defineProperty(),它在IE9中引入).

您可以在MSDN上阅读有关该主题的更多信息:HTML应用程序简介(HTA)

可以在MSDN上找到JS和CSS的IE版本信息:

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
Run Code Online (Sandbox Code Playgroud)

您还可以使用ScriptEngine函数来查找最新的脚本版本:

ver = ScriptEngine() + ' V ';
ver += ScriptEngineMajorVersion() + '.';
ver += ScriptEngineMinorVersion() + '.';
ver += ScriptEngineBuildVersion();
alert(ver);
Run Code Online (Sandbox Code Playgroud)

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

  • @ ndm13注意,可以通过在一个文件中包含HTA标签和属性并设置`NVAIGABLE = yes',并将HTML放在单独的文件中来解决此问题。然后,您可以在HTA中使用“ window.location”导航到HTML文件,并且HTML文件将使用适合该页面的最新IE。 (4认同)
  • 每当我使用元标记时,我的hta:应用程序属性都不起作用.如果我发表评论,他们就会这样做.有解决方案吗? (3认同)
  • 不幸的是,我没有一个很好的解决方案.从IE10开始,似乎许多HTA属性不再应用了(在解析后的代码中,`HTA`标签被移动到`body`).在IE9中,它们似乎仍然受到尊重.我主要使用`IE = 9`而不是`IE = edge`,它至少提供了现代事件处理和大多数HTML5标签,包括`svg`和`canvas`. (3认同)
  • `IE = 9`完美无缺!我希望这在某些方面得到解决,但是因为他们似乎正在逐步淘汰这一点,这是值得怀疑的.如果下一版本的Windows不支持HTA文件,我不会感到惊讶. (2认同)