2013-10-24 35 views
11

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

目前创造了一些脚本文件 - 并试图利用Object.defineProperty

当作为HTA运行 - 它的错误,指出对象不支持此属性或方法。我已经将它作为一个HTM文件运行来检查 - 并且完全没有问题。

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

回答

14

使用的JavaScript(或JScript)版本取决于三件事:安装了Interner 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版本号代替edge时,可以使用IE版本号来降级应用程序,并使用较新的IE进行运行。

省略DTD应该总是放弃应用程序以Quirks模式运行,在HTA情况下它与IE5类似。但是,在这种情况下,文档模式可以使用x-ua-compatible进行更改,但至少在IE8中存在一些不一致之处。如果不需要Quirks模式,则使用DTD总是最安全的。

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

您可以在MSDN了解更多有关的主题:Introduction to HTML Applications (HTAs)

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

JavaScript version information

CSS Compatibility in Internet Explorer

这里有一个“安全开始“的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); 

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

+2

每当我使用元标记,我的hta:应用程序属性不起作用。如果我将它评论出来,那么他们会这么做有解决方案吗? – ndm13

+2

不幸的是,我没有一个很好的解决方案。从IE10开始,似乎许多HTA属性不再被应用(在解析后的代码中,HTA标签被移动到了“body”)。在IE9中,他们似乎仍然受到尊重。我主要使用'IE = 9'而不是'IE = edge',它至少提供了现代事件处理和大部分HTML5标记,包括'svg'和'canvas'。 – Teemu

+2

'IE = 9'完美无缺!我希望这一点在某些时候是固定的,但它似乎正在逐步淘汰这一点,这是值得怀疑的。如果下一个版本的Windows不支持HTA文件,我不会感到惊讶。 – ndm13