javascript - ActiveX 事件和 Javascript 回调注册

标签 javascript c# activex activexobject

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

我会解释一下自己:

这是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 回调?

最佳答案

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

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

但是,有一个问题。 Javascript 的本质是

  1. 函数声明先于文件中的其他内容进行评估
  2. 此函数声明被解释为向 Lib 引用的对象添加一个事件处理程序,该对象在文件开头并不存在。

解决方案是强制在变量初始化之后评估函数声明,例如:

var Lib = new ActiveXObject("AGI.GraphometricLib");
Lib.Initializer();

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

参见here完整的文章,以及 here我编写的一个库使这变得更容易一些。

关于javascript - ActiveX 事件和 Javascript 回调注册,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26298754/

相关文章:

excel - 在 Excel 中打印 MATLAB 图窗并调整其大小

通过远程桌面 activex 进行音频重定向

jquery - 通过代码控制页面大小和打印份数

c# - 生成两个不同的随机数 C#

javascript - 如何为 React 路由器 dom 路由中的每个组件获取嵌套资源

java - Browser.evaluate() 方法显示错误

javascript - AngularJS 在 ngClass 更改后执行作用域函数

c# - AE.Net.Mail message.value 为空

c# - 用于在大型 .cs 文件中查找事件处理程序的正则表达式

javascript - 获得具有特定总和的范围内 n 个数字的所有可能排列的算法