这在某种程度上是answer here的后续。
我有一个自定义的ActiveX控件,它会引发一个事件(带有"msg“参数的”ReceiveMessage“),需要由web浏览器中的Javascript来处理。从历史上看,我们可以在不同的项目上使用以下仅限IE的语法来实现这一点:
function MyControl::ReceiveMessage(msg)
{
alert(msg);
}
但是,当在隐藏控件的布局中时,Javascript找不到控件。具体地说,如果我们把它放到一个普通的超文本标记语言页面中,它可以很好地工作,但是如果我们把它放到一个用<Form>
标签包装的ASPX页面中,我们会得到一个"MyControl is undefined“错误。我们已经尝试了以下几种变体:
var GetControl = document.getElementById("MyControl");
function GetControl::ReceiveMessage(msg)
{
alert(msg);
}
..。但是它会导致Javascript错误"GetControl is undefined“。
处理从ActiveX控件发送的事件的正确方法是什么?现在我们只对在IE中让它工作感兴趣。对于我们正在做的事情,这必须是一个自定义的ActiveX控件。
谢谢。
发布于 2008-09-30 11:58:47
我能够使用下面的脚本块格式让它工作,但我仍然很好奇这是不是最好的方法:
<script for="MyControl" event="ReceiveMessage(msg)">
alert(msg);
</script>
发布于 2010-07-08 20:19:48
我以前在我的应用程序中使用过activex。我将对象标记放在ASP.NET表单中,下面的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);
}
发布于 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函数,如下所示:
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和其他安全功能才能使其更好地工作。
https://stackoverflow.com/questions/150814
复制相似问题