2008-10-16 33 views
0

我有一個activex對象,我加載到一個HTML頁面。然後,我使用該activex對象來創建另一個對象,但我需要用創建的新對象註冊一個事件。該對象正在等待某個類型的事件偵聽器。Javascript註冊事件到對象

我可以加載這個相同的DLL在C#中,它會正常工作。代碼看起來像這樣的C#。

upload = obj.constructUploadObj(uploadConfig); 
upload.stateChanged += new UploadActionEvents_stateChangedEventHandler(upload_stateChanged); 

在javascript中我也有類似的代碼,但我不能得到與對象一起註冊的事件。

uploadAction = obj.constructUploadObj(uploadConfig); 
uploadAction.stateChanged = upload_stateChanged; 

function upload_stateChanged(sender){ 
    writeLine("uploadState changed " + sender.getState()); 
} 

我已經列舉了一些JavaScript中的uploadAction對象的屬性,以確保它實際上是創建。當我嘗試使用uploadAction註冊事件時,它會拋出一個錯誤,指出「對象不支持此屬性或方法」。

對我來說,它似乎是它期待的一個強類型事件。無論如何在javascript中註冊類似於C#的事件?

在此先感謝。

回答

0

在公司發現這些屬性無法通過javascript訪問。他們需要將它們外部化以便在JavaScript中使用。

0

您的JavaScript應該是這個樣子:

function uploadAction::stateChanged(parms) 
{ 
    // ... 
    // implementation 
    // ... 
} 

請注意,這是一個靜態函數聲明,假設你有一個名爲「uploadAction」的Active X對象。我知道這是行得通的 - 我們在我的公司使用它。

+0

如果我嘗試在我的JS中編寫這樣的函數,它會完全崩潰。 – JustLogic 2008-10-16 16:50:40

+0

uploadAction不是activex對象。 activex對象可以說,axObj有一個構造函數axObj.constructUpload,用於創建uploadAction對象。在創建它之後,我在uploadAction上調用了一個函數來驗證是否存在。 – JustLogic 2008-10-16 16:52:12

0

錯誤消息表示uploadAction不支持stateChanged屬性。你的JavaScript代碼看起來是正確的,這個問題似乎與你試圖附加事件處理程序的對象有關。

0

我建議使用概述的高級事件註冊模型here

uploadAction.addEventListener('stateChanged', upload_stateChanged, false);

筆記,您可能需要詢問你的論點爲upload_stateChanged方法,作爲第一個參數應該是事件狀態。例如:upload_stateChanged(evt, sender) ...