1

我想利用来自 IE activex 对象的事件,但似乎无法让它工作。

请参阅下面的代码,如果有任何想法,请告诉我:

<html>
  <head>
   <title>Automate IE</title>
   <script type="text/javascript" language="javascript">
     var ie = new ActiveXObject( "InternetExplorer.Application" );
     [...some calls to ie functions...]
   </script>
  </head>
  <body>
    This is a test for IE automation.
  </body>

现在我希望能够使用此处列出的“ie”对象的事件:MSDN IE Events

但似乎无法让它工作......我尝试了以下解决方案(没有奏效):

方法一:

1. eval( "function ie::EventName(){return MyCustomEvent()}" ); - no joy )-:

方法二:

2. <script for="ie" event="EventName">some code here</script> - still no joy )-:

此文件以“HTA”扩展名保存 - 并与 MSHTA 脚本主机一起运行

任何关于如何做到这一点的建议\帮助将不胜感激......谢谢!

4

2 回答 2

1

我用你的第一种方法取得了成功(见这里)。

根据我的经验,函数定义的参数必须与事件定义的参数完全匹配,例如对于BeforeNavigate2事件:

function ie::BeforeNavigate2(pDisp, URL, Flags, TargetFrameName, PostData, Headers, Cancel) {
    /* do stuff here */ 
}

几乎所有 Internet Explorer 应用程序事件都需要一些参数,因此您的eval操作不起作用。

(这可能是不言而喻的,但您必须填写实际的事件名称;您不能随意调用该函数。)

于 2017-02-01T22:42:27.333 回答
0

我会早点回答你的问题,但过去三年我有两个孩子;)

我认为在 HTA 中不再可能了。ActiveXObjects 从不支持 JScript 中的事件。在 IE11 之前,您可以使用 VBScript 和 CreateObject(object, event_prefix) 来注册事件挂钩 - https://msdn.microsoft.com/en-us/library/xzysf6hc(v=vs.84).aspx (您只需要在 VBScript 中注册事件,因为可以在 JavaScript 中访问 VBScript 变量。)

如果 IE<11 不是一个选项,您将需要使用 WScript/CScript。这是一个要点,例如:https ://gist.github.com/subzey/4374329

使用 activex 对象从 HTA 执行 WScript 是可行的WScript.Shell,但不要抱太大希望,因为没有类似的WScript.CreateObjectActiveX 对象(或者无论如何可以CreateObject()从 JavaScript/JScript 访问。)

为了实现您想要的,您需要将您的 IE 逻辑封装在一个 WScript/CScript 主机脚本中,该脚本监控(或轮询)硬盘上的文件。然后您的 HTA 应用程序可以将命令写入该文件。如果您需要一个反馈循环,您的 HTA 可以监视一个命令结果文件,该文件在 JScript 逻辑完成时得到更新。

自 90 年代以来,我一直是 HTA 的支持者,我仍然将它们用于个人快速和肮脏的项目,但关于它们的长寿的文章已经写在墙上了。自从 IE10 以来,已经有一堆与主机窗口相关的错误,微软已经确认它们不会被修复。

鉴于此,如果您不依赖 IE 特定的功能,您可能希望研究 Electron 作为替代方案:http: //electron.atom.io/docs/v0.27.0/api/browser-window/

于 2016-05-10T14:53:32.183 回答