2014-10-10 78 views
0

我开发了一个c#库,注册为COM组件。现在我需要将使用Javascript导入创建到HTML页面的ActiveX以使用ActiveX功能。一切都很好,除了回调,可能我缺乏Javascript的知识,但我仍然无法正确使用回调。我搜索了很多例子,但有些对我的目标来说太深了,另外一个例子不能清楚地说明这一点,所以在这里提出问题。ActiveX事件和Javascript Callaback Reigstration

我将解释自己:

氏是在ActiveX组件

public delegate void ButtonEvent(object sender, SignEventArgs e); 
public event ButtonEvent ButtonSignOk; 

这个事件是我的JavaScript片段

try { 
    var Lib = new ActiveXObject("AGI.GraphometricLib"); 
    Lib.Initializer(); 
    Lib.addEventListener('ButtonSignOk', OnOkHandler, false); 
    } catch (ex) { 
     alert("Error: " + ex.message); 
    } 

function OnOkHandler(arg1, arg2){ 
    alert("Pressed!"); 
} 

显然的addEventListener返回一个错误。

Error: Object doesn't support property or method 'addEventListener'

如何正确设置在ActiveX中定义的事件的JavaScript回调?

+2

看看[this](http://stackoverflow.com/a/379872/3394380)或[this](http://stackoverflow.com/a/152724/3394380) – yW0K5o 2014-10-10 13:56:28

+0

谢谢,我会试一下支票。谢谢! – Razlo3p 2014-10-10 14:49:27

+0

[这是完整的工作示例](https://code.msdn.microsoft.com/windowsdesktop/CSActiveX-c3f43e7d)适用于Microsoft代码的VS 2008。 – yW0K5o 2014-10-10 15:34:33

回答

1

对ActiveX对象的事件处理程序可以用下面的语法来写:

function Lib::ButtonSignOk(sender, e) { 
    alert("Pressed!"); 
} 

然而,有一个陷阱。的Javascript的本质是

  1. 函数声明文件
  2. 这个函数声明被解释为添加事件处理程序通过Lib所指的对象,它不会在存在于其他任何东西之前评估文件的开头。

解决的办法是强制函数声明进行评估后的变量初始化,如:

//assuming we are not within another function 
var Lib = new ActiveXObject("AGI.GraphometricLib"); 
Lib.Initializer(); 

(function() { 
    function Lib::ButtonSignOk(sender, e) { 
     alert('Pressed!'); 
    } 
})(); 

here一个完整的书面记录,并为here我已经写了一个库使这一点更容易。