【问题标题】:JavaScript version in HTAHTA 中的 JavaScript 版本
【发布时间】:2013-11-03 06:37:12
【问题描述】:

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

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

当作为 HTA 运行时,它会出错,指出 Object 不支持此属性或方法。我将它作为 HTM 文件运行只是为了检查 - 完全没有问题。

所以我只能假设mshta.exe 使用的是较旧的 JavaScript 引擎。谁能证实这一点?

【问题讨论】:

    标签: javascript version hta defineproperty


    【解决方案1】:

    使用的 JavaScript(或 JScript)版本取决于三件事:安装的内部资源管理器版本、使用的文档类型声明 (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 上阅读有关该主题的更多信息: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);
    

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

    【讨论】:

    • 每当我使用元标记时,我的 hta:application 属性都不起作用。如果我将其注释掉,那么他们会这样做。有解决办法吗?
    • 不幸的是,我对此没有一个好的解决方案。自 IE10 以来,似乎不再应用许多 HTA 属性(在解析的代码中,HTA 标记被移动到body)。在 IE9 中,它们似乎仍然受到尊重。我主要使用IE=9 而不是IE=edge,它至少提供现代事件处理和大部分HTML5 标签,包括svgcanvas
    • IE=9 完美运行!我希望这会在某个时候得到解决,但这是值得怀疑的,因为他们似乎正在逐步淘汰它。如果下一版本的 Windows 不支持 HTA 文件,我不会感到惊讶。
    • @Teemu 然而只有 IE11 支持 flex 模块、渐变等 CSS 功能
    • @ndm13 请注意,您可以通过将 HTA 标记和属性放在一个文件中并设置 NVAIGABLE=yes 并将 HTML 放在单独的文件中来解决此问题。然后,您可以在 HTA 中使用 window.location 导航到您的 HTML 文件,该 HTML 文件将使用适用于该页面的最新 IE。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-27
    • 1970-01-01
    • 2018-12-28
    相关资源
    最近更新 更多