【问题标题】:HTA's; use other browser to host?HTA;使用其他浏览器托管?
【发布时间】:2010-11-02 19:45:52
【问题描述】:

如果微软使用 IE 作为 HTA 的本地主机的方法,我可以使用任何其他浏览器代替吗?

【问题讨论】:

    标签: html internet-explorer browser hta


    【解决方案1】:

    你不能。

    有一个类似的 Mozilla 项目,名为 XULRunner,但 HTA 仅适用于 Internet Explorer - 这两种技术不兼容。

    明确一点:HTA 可能无法在任何非 IE 中工作。是的,HTA 是一个窗口中的浏览器控件,但它也具有正常的应用程序权限(即文件系统访问、注册表、任意代码执行等)。在浏览器中运行时,这些权限会被拒绝(有充分的理由 - 您不希望任何网页都可以读取您的文件)。

    因此,在浏览器中启动 HTA 是可行的,但与本地系统的任何交互都会失败,这否定了整个想法。在 XULRunner 中启动 HTA 也会失败,因为 XULRunner 使用完全不同的 API。

    唯一可能起作用的场景是:一个不使用任何 HTA 特定或 XULRunner 特定 API 的 web 应用程序(即表现得像一个普通的浏览器应用程序)。在这种情况下,您的应用程序可以与 HTA、XULRunner 以及任何浏览器一起使用。顺便说一句,这将带走使用 HTA 的任何优势,并由于更高的权限而引入大量安全漏洞;为此,您最好使用 Google Chrome 或 Mozilla Prism。

    (我们一直在努力寻找跨浏览器的解决方案,HTA肯定不是)

    【讨论】:

    • 这似乎是截至 2020 年 1 月 6 日的最佳答案。您无法使用 Google Chrome 或更新的基于 V8 的 node.js 浏览器引擎运行 mshta.exe 应用程序。 @Mike Gale 的答案很适合背景,但没有提供简短的答案……您不能使用 Chrome 打开和运行 .hta 应用程序。这是该问题的最新描述之一和现代替代方案的页面。 stackoverflow.com/questions/10619990/…
    • 我知道另一种可能可行的方案:一个使用某些 HTA 特定 API 但在检查应用程序是否作为HTA(即if (navigator.appName == "Microsoft Internet Explorer"))。在 else 语句中,它可以显示一条错误消息,例如“您只能在应用程序作为 HTA 运行时使用此功能。”。在这种情况下,该应用程序可以与 HTA 以及任何其他浏览器一起使用,尽管它的某些功能无法使用。
    • 确定应用程序是否作为 HTA 运行的另一种方法:检查 <hta:application> 元素的 commandLine 属性。如果应用程序使用 mshta.exe 运行,则该属性将为您提供一个包含应用程序命令行的字符串。否则,它将为您提供 undefined 的值。
    【解决方案2】:

    我正在处理从各种浏览器运行 hta 的相关任务。我已将我的发现放在这里,以供其他尝试这样做并发现此问题的人使用。

    您可以使用 IE 使用的相同 mshta 可执行文件从多个浏览器运行 hta。您的 hta 代码中需要完全限定的 URI,而 IE 不需要。

    今天 (2011-02-01) 我尝试使用来自 Firefox (3.6.13)Opera 11Safari for Windows 5.0.3 的 hta。

    在 Firefox 出现一些初期问题之后,我从这些浏览器中得到了 hta 的工作(在所有情况下,这些使用与 IE 相同的 mshta 可执行文件。这不是在其他浏览器中运行 hta,而是运行 hta 的 from 其他浏览器。这可能适合您的目的。)

    hta 在我的机器上启动了桌面应用程序(就像它从 IE 一样)。

    体验并不完美。对于 IE,我在 hta 中设置了根相对路径。对于其他浏览器,您不能这样做。您需要为图像、引用的 hta 和图标等内容设置完全限定的 URI。

    所以经过一些编辑后,我可以在 4 个浏览器(IE 8、FF 3、Opera 11 和 Safari 5 (Windows))上运行 hta。

    (快速快照。我正在从本地计算机上的 Web 服务器运行 hta。(我没有计划从远程站点运行它们。)这允许我的工作流程从浏览器到桌面更多顺利。hta 启动了本地应用程序,这些应用程序执行诸如编辑网页(包括 hta 本身)之类的操作,验证这些页面并启动 IDE。弥合浏览器和桌面应用程序之间的差距。一直是一种解放体验。我推荐它!)

    注意事项:

    1. Firefox 开发团队有关于启用 hta 的说明,这鼓励我在最初失败后继续。
    2. 为了在 Firefox 配置中实现这一点,我将 HTML 应用程序设置为在 mshta.exe (称为 Microsoft HTML 应用程序主机,在组合框中)下运行时间>。最初那没有用。我选择了“其他”,手动选择了相同的应用程序。这行得通,虽然我有两个相同的条目! 您的机器上需要 mshta.exe 才能在任何浏览器上运行。我假设安装 mshta 的正常方法是使用 IE。 (mshta 本质上是 IE 的修改版本,可能不是当前版本!
    3. Firefox 开发人员已将此标记为战略性努力,旨在将 IE 从企业中移除。他们的实现(和 Opera 的)强制您使用完全限定的 URI,但除此之外,hta 的工作正常。
    4. Firefox 似乎缓存 hta 的旧版本,并且不下载新版本,尽管它似乎下载了一些东西!您可能需要在开发过程中清除缓存。
    5. 我第一次尝试使用 Chrome 没有成功。进一步的调查表明,Chrome 没有用于调用其他进程的本机界面,具体取决于它们的文件扩展名。

    【讨论】:

      【解决方案3】:

      与其说 IE 托管任何东西,不如说 mshta.exe 托管它与 IE 共享的组件。 MSHTA 是一个脚本宿主,就像 CScript 和 WScript 一样。虽然 IE 也是一个脚本宿主(在最严格的意义上),但它的主要目的是成为一个 Web 浏览器。

      前面提到的 Mozilla 项目是我发现的最接近的替代方案,它基于浏览器的内部结构。

      Windows 也存在其他脚本宿主。其中之一是 NS Basic/Desktop,但它基于标准 Windows 控件,而不是浏览器呈现和 HTML DOM。

      【讨论】:

        【解决方案4】:

        要明确一点:真正呈现网页的不是 IE 也不是 MSHTMA。渲染的东西部分内置在操作系统中。因此,诸如 Active Desktop(有人记得 XP 的东西吗?)或 .HTA 或 .CHM 之类的东西可以在没有 IE 的情况下工作。识别一些 HTML 东西的方法是一样的。

        【讨论】:

          【解决方案5】:

          我相信 Internet Explorer 托管 HTA 应用程序是有效的,因为他们的 HTA 主机已注册以处理扩展。如果确实如此,那么理论上可以使用另一个主机

          为了完整起见,我应该指出我没有开发 HTA 应用程序的经验,我的回答是基于我对 Windows 操作系统的理解

          【讨论】:

            猜你喜欢
            • 2013-02-05
            • 2010-11-11
            • 1970-01-01
            • 2012-08-16
            • 1970-01-01
            • 2013-10-09
            • 1970-01-01
            • 1970-01-01
            • 2021-10-24
            相关资源
            最近更新 更多