怎么响应COM组件的链接点事件

时间:2022-08-30 21:36:00
现在有一个COM组件,想在Web中测试一下,但是没有用过JavaScrip,不是到怎么响应COM的事件。还请各位高手给个详细的例子。

19 个解决方案

#1


组件里面必须有相应的接口向web页公开. 
比如说media player组件有play方法是公开的, 那么你调用 mp.play() 就可以使这个播放器控件开始播放.

#2


谢谢1楼。
我知道怎样在Web中调用组件的方法。
我现在的问题是,如果组件有一个事件,或者消息,需要通知Web,那该怎么办?
组件中实现了几个事件,就是为了让调用者(Web)能够处理这些事件,已达到互动。我不知道怎么才能让Web处理这些事件。

#3


可以在组件里面指定当事件发生时执行外部动作嘛. 比如说 xmlhttp组件的 onreadystatechange, 就是当状态改变时发生.

1.组件在有事件时主动执行外部定义的处理函数
2.外部定时检测组件的状态, 发现有改变时执行某个动作

#4


引用 3 楼 xiangtanboy 的回复:
可以在组件里面指定当事件发生时执行外部动作嘛. 比如说 xmlhttp组件的 onreadystatechange, 就是当状态改变时发生. 

1.组件在有事件时主动执行外部定义的处理函数 
2.外部定时检测组件的状态, 发现有改变时执行某个动作


这也是可行的办法。但是通过链接点事件行吗?
因为组件的编写应该是不考虑调用者的语言的。如果不是用COM本身的事件,那么对于Web,就要单独实现一个COM,二期如果Web的脚本不同,COM也要不同。

#5


不知你说的 "通过链接点事件" 该怎么理解.
但有一点, 组件调用外部的代码, 是用外部代码的引擎来执行的, 所以不需要考虑调用者的语言.
如果页面上有多个COM组件, 要在组件间进行通信:
  如果不能直接互相调用对方的方法, 可以使用外部脚本做代理实现.

#6


说的具体点吧。
加入说我的组件CLSID:1DEA726F-9D1D-432B-9C00-959E556229C8
有一个事件是OnStart。
那么应该怎样用javascript响应这个事件?
请 xiangtanboy给一个简单的例子。多谢了。对javascrip实在知道的太少。

#7


<object classid="CLSID:1DEA726F-9D1D-432B-9C00-959E556229C8" id="myCom"></object>
<script type="text/javascript" language="javascript">
function onStart()
{
//start时要执行的动作
}
document.getElementById('myCom').onStart = onStart;
</script>

#8


引用 7 楼 xiangtanboy 的回复:
HTML code
<object classid="CLSID:1DEA726F-9D1D-432B-9C00-959E556229C8" id="myCom"></object>
<script type="text/javascript" language="javascript">
function onStart()
{
    //start时要执行的动作
}
document.getElementById('myCom').onStart = onStart;
</script>


没有成功。没有调用指定的那个函数。

#9


还没有解决问题。
还请高手赐教。

#10


是不是使用JS不能响应COM的事件?请有经验的高手明示。

#11


类似这样:


<script language="javascript" for="myCom" event="OnStart">
alert('OnStart');
</script>

#12


谢谢dh20156
我这样试过,不行。
不知道这种方法对组件的事件有什么特殊要求。我的这个组件是通过连接点实现的。
我查了一些资料,说微软的很过软件都支持连接点实现的事件的,比如IE,office。所以我想用JS应该可以实现开头说的功能。
另外这个组件的事件实现是没有问题的。我在MFC中试过了,一切正常。
不知道JS中的问题出在哪里。
哪位大侠有成功的例子吗?给我学习一下。

#13


可能MFC里面调用和JS里面调用是不同的吧.
你要确认一点, onStart是不是对外公开了.
alert(typeof myCom.onStart) 如果显示 undefined, 那么JS是不能访问到这个接口的.

#14


不是让JS访问组件的这个接口,而是要让JS实现一个函数,来让组件来访问。

#15


请高手指教啊。

#16


让JS实现一个函数,来让组件来访问,这个有点儿难度,也不符合ActiveX/COM组件的设计理念。
你是不是想隐藏源代码呀?

#17


引用 11 楼 dh20156 的回复:
类似这样: 

JScript code

<script language="javascript" for="myCom" event="OnStart">
    alert('OnStart');
</script>


谢谢各位,上面的方法是正确的。
之前没有成功,是组件的问题,需要实现接口IProvideClassInfo2,组件的事件才能被JS捕获。

#18


微软是否为ActiveX/COM提供了简单途径访问web文档对象,我没研究过。
但是可以提供给你一个线索,Flash里面是可以调用页面js函数的,Flash也就是页面中的一个ActiveX控件。

#19


请问可以在外部调用COM的程序中在COM事件响应中调用COM方法吗?

#1


组件里面必须有相应的接口向web页公开. 
比如说media player组件有play方法是公开的, 那么你调用 mp.play() 就可以使这个播放器控件开始播放.

#2


谢谢1楼。
我知道怎样在Web中调用组件的方法。
我现在的问题是,如果组件有一个事件,或者消息,需要通知Web,那该怎么办?
组件中实现了几个事件,就是为了让调用者(Web)能够处理这些事件,已达到互动。我不知道怎么才能让Web处理这些事件。

#3


可以在组件里面指定当事件发生时执行外部动作嘛. 比如说 xmlhttp组件的 onreadystatechange, 就是当状态改变时发生.

1.组件在有事件时主动执行外部定义的处理函数
2.外部定时检测组件的状态, 发现有改变时执行某个动作

#4


引用 3 楼 xiangtanboy 的回复:
可以在组件里面指定当事件发生时执行外部动作嘛. 比如说 xmlhttp组件的 onreadystatechange, 就是当状态改变时发生. 

1.组件在有事件时主动执行外部定义的处理函数 
2.外部定时检测组件的状态, 发现有改变时执行某个动作


这也是可行的办法。但是通过链接点事件行吗?
因为组件的编写应该是不考虑调用者的语言的。如果不是用COM本身的事件,那么对于Web,就要单独实现一个COM,二期如果Web的脚本不同,COM也要不同。

#5


不知你说的 "通过链接点事件" 该怎么理解.
但有一点, 组件调用外部的代码, 是用外部代码的引擎来执行的, 所以不需要考虑调用者的语言.
如果页面上有多个COM组件, 要在组件间进行通信:
  如果不能直接互相调用对方的方法, 可以使用外部脚本做代理实现.

#6


说的具体点吧。
加入说我的组件CLSID:1DEA726F-9D1D-432B-9C00-959E556229C8
有一个事件是OnStart。
那么应该怎样用javascript响应这个事件?
请 xiangtanboy给一个简单的例子。多谢了。对javascrip实在知道的太少。

#7


<object classid="CLSID:1DEA726F-9D1D-432B-9C00-959E556229C8" id="myCom"></object>
<script type="text/javascript" language="javascript">
function onStart()
{
//start时要执行的动作
}
document.getElementById('myCom').onStart = onStart;
</script>

#8


引用 7 楼 xiangtanboy 的回复:
HTML code
<object classid="CLSID:1DEA726F-9D1D-432B-9C00-959E556229C8" id="myCom"></object>
<script type="text/javascript" language="javascript">
function onStart()
{
    //start时要执行的动作
}
document.getElementById('myCom').onStart = onStart;
</script>


没有成功。没有调用指定的那个函数。

#9


还没有解决问题。
还请高手赐教。

#10


是不是使用JS不能响应COM的事件?请有经验的高手明示。

#11


类似这样:


<script language="javascript" for="myCom" event="OnStart">
alert('OnStart');
</script>

#12


谢谢dh20156
我这样试过,不行。
不知道这种方法对组件的事件有什么特殊要求。我的这个组件是通过连接点实现的。
我查了一些资料,说微软的很过软件都支持连接点实现的事件的,比如IE,office。所以我想用JS应该可以实现开头说的功能。
另外这个组件的事件实现是没有问题的。我在MFC中试过了,一切正常。
不知道JS中的问题出在哪里。
哪位大侠有成功的例子吗?给我学习一下。

#13


可能MFC里面调用和JS里面调用是不同的吧.
你要确认一点, onStart是不是对外公开了.
alert(typeof myCom.onStart) 如果显示 undefined, 那么JS是不能访问到这个接口的.

#14


不是让JS访问组件的这个接口,而是要让JS实现一个函数,来让组件来访问。

#15


请高手指教啊。

#16


让JS实现一个函数,来让组件来访问,这个有点儿难度,也不符合ActiveX/COM组件的设计理念。
你是不是想隐藏源代码呀?

#17


引用 11 楼 dh20156 的回复:
类似这样: 

JScript code

<script language="javascript" for="myCom" event="OnStart">
    alert('OnStart');
</script>


谢谢各位,上面的方法是正确的。
之前没有成功,是组件的问题,需要实现接口IProvideClassInfo2,组件的事件才能被JS捕获。

#18


微软是否为ActiveX/COM提供了简单途径访问web文档对象,我没研究过。
但是可以提供给你一个线索,Flash里面是可以调用页面js函数的,Flash也就是页面中的一个ActiveX控件。

#19


请问可以在外部调用COM的程序中在COM事件响应中调用COM方法吗?

#20