首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Javascript中处理ActiveX事件

如何在Javascript中处理ActiveX事件
EN

Stack Overflow用户
提问于 2008-09-29 21:35:24
回答 6查看 61.4K关注 0票数 20

这在某种程度上是answer here的后续。

我有一个自定义的ActiveX控件,它会引发一个事件(带有"msg“参数的”ReceiveMessage“),需要由web浏览器中的Javascript来处理。从历史上看,我们可以在不同的项目上使用以下仅限IE的语法来实现这一点:

代码语言:javascript
复制
function MyControl::ReceiveMessage(msg)
{
   alert(msg);
}

但是,当在隐藏控件的布局中时,Javascript找不到控件。具体地说,如果我们把它放到一个普通的超文本标记语言页面中,它可以很好地工作,但是如果我们把它放到一个用<Form>标签包装的ASPX页面中,我们会得到一个"MyControl is undefined“错误。我们已经尝试了以下几种变体:

代码语言:javascript
复制
var GetControl = document.getElementById("MyControl");
function GetControl::ReceiveMessage(msg)
{
   alert(msg);
}

..。但是它会导致Javascript错误"GetControl is undefined“。

处理从ActiveX控件发送的事件的正确方法是什么?现在我们只对在IE中让它工作感兴趣。对于我们正在做的事情,这必须是一个自定义的ActiveX控件。

谢谢。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2008-09-30 11:58:47

我能够使用下面的脚本块格式让它工作,但我仍然很好奇这是不是最好的方法:

代码语言:javascript
复制
<script for="MyControl" event="ReceiveMessage(msg)">
    alert(msg);
</script>
票数 13
EN

Stack Overflow用户

发布于 2010-07-08 20:19:48

我以前在我的应用程序中使用过activex。我将对象标记放在ASP.NET表单中,下面的JavaScript适用于我。

代码语言:javascript
复制
function onEventHandler(arg1, arg2){
    // do something
}

window.onload = function(){
    var yourActiveXObject = document.getElementById('YourObjectTagID');
    if(typeof(yourActiveXObject) === 'undefined' || yourActiveXObject === null){
        alert('Unable to load ActiveX');
        return;
    }

    // attach events
    var status = yourActiveXObject.attachEvent('EventName', onEventHandler);
}
票数 8
EN

Stack Overflow用户

发布于 2008-12-19 01:29:01

好的,但是如果你使用的是带有继承UserControl (ActiveX)的C# (.NET 2.0) ...使其工作的唯一方法是“扩展”事件的处理程序功能:http://www.codeproject.com/KB/dotnet/extend_events.aspx?display=Print

上面的项目链接来自我们的朋友Werner Willemsens先生已经保存了我的项目。如果不这样做,javascript就不能绑定到事件处理程序。

由于他选择的示例,他以一种复杂的方式使用了“扩展”,但如果您将其简化,将句柄直接附加到事件本身,它也可以工作。C# ActiveX应该支持"ScriptCallbackObject“,以便将事件绑定到javascript函数,如下所示:

代码语言:javascript
复制
  var clock = new ActiveXObject("Clocks.clock");
  var extendedClockEvents = clock.ExtendedClockEvents();
  // Here you assign (subscribe to) your callback method!
  extendedClockEvents.ScriptCallbackObject = clock_Callback; 
  ...
  function clock_Callback(time)
  {
    document.getElementById("text_tag").innerHTML = time;
  }

当然,您必须实现IObjectSafety和其他安全功能才能使其更好地工作。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/150814

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档