我有一个加载到html页面的activex对象。然后我使用该activex对象创建另一个对象,但我需要在创建新对象的情况下注册一个事件。该对象期望某种类型的事件监听器。

我可以在c#中加载这个相同的dll,它会正常工作。对于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#的事件?

提前致谢。

有帮助吗?

解决方案 3

从公司发现这些属性无法通过javascript访问。他们需要将它们外部化以便在javascript中使用。

其他提示

你的javascript应该是这样的:

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

请注意,这是一个静态函数声明,假设您有一个名为“uploadAction”的Active X对象。我知道这确实有用 - 我们在公司使用它。

错误消息表示uploadAction不支持stateChanged属性。您的javascript代码看起来正确,问题似乎与您尝试将事件处理程序附加到的对象有关。

我建议使用此处概述的高级事件注册模型。

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

请注意,您可能需要查询 upload_stateChanged 方法的参数,因为第一个参数应该是事件状态。例如: upload_stateChanged(evt,sender) ...

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top