2014-10-10 81 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我已經寫了一個庫使這一點更容易。