2012-07-31 102 views
1

我想利用从IE ActiveX对象事件,并似乎无法得到它的工作。ActiveXObject的JavaScript事件

请参见下面的代码还是让我知道,如果任何IDEA的浮现在脑海中:

<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> 

现在我希望能够使用事件的“即”对象这里列出:MSDN IE Events

但似乎无法得到它的工作...我尝试以下解决方案(无工作):

方法1:

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

方法2:

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

该文件保存为“HTA”扩展 - 并与MSHTA脚本宿主

如何做到这一点任何建议\帮助运行将非常感激。 ..谢谢!

+0

你检查你的浏览器安全设置?也许你需要把你的网站放在信任的测试 – 2012-07-31 23:09:45

回答

0

我会回答你的问题越快,但我在过去三年中有两个孩子;)

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

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

从HTA执行的WScript与WScript.Shell ActiveX对象是可行的,但不要从JavaScript让您的希望,因为没有类似WScript.CreateObject ActiveX对象(或反正访问CreateObject()/JScript的。)

达到你想要什么,你需要包装在监视(或投票)硬盘驱动器上的文件的WScript /的CScript主机脚本IE的逻辑了。然后您的HTA应用程序可以将命令写入该文件。如果你需要一个反馈回路的HTA可以监测时JScript的逻辑面漆得到更新命令结果的文件。

我一直HTA的的支持者自90年代以来,我仍然使用他们的个人快速和肮脏的项目,但写的是关于他们的长寿墙上。已经有一堆,因为IE10和微软已经确认,他们将不会被固定与主机窗口的错误。

鉴于这种情况,你可能需要调查电子作为选择,如果你不依赖于IE特定功能:http://electron.atom.io/docs/v0.27.0/api/browser-window/

+0

我可以在[我的答案](http://stackoverflow.com/a/41991210/111794)上得到你的输入吗? – 2017-02-01 22:42:54

+0

虽然我没有测试你的方法来调用事件,但我至少确认了无论使用哪种引擎,HTA都支持该语法。我当然希望我在10年前了解到这一点:/另一个例子说明为什么我们不应该说“X不能做”。当我有机会测试事件调用时,我会编辑这篇文章并给你疯狂的道具。 – 2017-03-22 22:09:21

1

我已经受够了你的第一种方法的成功(见here)。

从我的经验,这些参数必须在事件定义准确,例如匹配为BeforeNavigate2事件:

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

几乎所有的Internet Explorer应用程序事件采取一些参数,因此你的eval不起作用。

(这也可能是不言而喻的,但你必须填写真实事件名称,你不能说任何你想要的功能。)