关于ActiveX与Js的交互

zskof 2009-01-08 07:11:09
大家好,我用Atl做了一个最最简单的com,其中只有一个带连接点的接口,提供一个Add(int a, int b)的方法,在其事件接口中提供一个Result的方法,在Add中Fire_Result(a + b),现在的问题是,js可以顺利的调用Add,但Fire的时候js始终响应不到这个事件,JS相关代码如下:

<object id="MusicX" width=0 height=0 classid="clsid:951307F2-0122-441F-B5F3-514EE91BC781"></object>
<script language=JScript>
function Play()
{
MusicX.Add(3, 5);
}
</script>
<script language=JScript for=MusicX event=Result(b)>
alert("fuck microsoft");
</script>

请诸如高手帮我看看,可能哪些问题会造成这个BT的现象出现?
已经被困扰了一下午了,急盼救援
...全文
632 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tinary3v0 2009-01-09
  • 打赏
  • 举报
回复
<script language="JavaScript1.2" FOR="MusicX" EVENT = "Result" >   
alert("fuck microsoft");
</script>
Tinary3v0 2009-01-09
  • 打赏
  • 举报
回复
<script language="JavaScript1.2" FOR="MusicX" EVENT = "Result" >   
alert("fuck microsoft");
</script>


1.language="JavaScript1.2" 必须是JavaScript1.2只有这个版本以上才支持控件事件响应
2.FOR="MusicX" 指明ID 让JavaScript知道这个事件是那个控件的
3.EVENT = "Result" 指明事件名称 不必带参数 还没有发现能带参数的 所以IE中使用的控件最好直接发出一个事件就好了 不要在事件中再提供参数进去

当然 我没有发现并不说名JavaScript更高版本没有提供 楼主可以去查查。
zskof 2009-01-09
  • 打赏
  • 举报
回复
感谢楼上几位的支持,已解决,不过遗憾的是并不能用几位方法解决。

已经试过,写明javascript=1.2也不能响应连接点事件,最终解决方法是接口继承一个
public IProvideClassInfo2Impl <&CLSID_MusicX, NULL, &LIBID_MsSuckLib>

然后在映射处加入
COM_INTERFACE_ENTRY(IProvideClassInfo)
COM_INTERFACE_ENTRY(IProvideClassInfo2)

这样js才能响应抛出的事件,另外用属性的方法也可解决。
sourcceinsigt35 2009-01-09
  • 打赏
  • 举报
回复
不懂,帮顶
success000 2009-01-09
  • 打赏
  • 举报
回复
不懂,帮顶
effective100 2009-01-08
  • 打赏
  • 举报
回复
刚才排版出了点小问题:

<object id="MusicX" width=0 height=0 classid="clsid:951307F2-0122-441F-B5F3-514EE91BC781"> </object>
<script language="javascript" for="MusicX" event="Result(num1,num2)"> //类似与sink接收器,直观上说是和事件接口中Result方法进行配对。
HandleResult(num1,num2);
</script>

<script language="javascript" type="text/javascript">
function Play()
{
MusicX.Add(3, 5); //触发Fire,之后实质调用的是HandleResult(3, 5);
}

function HandleResult(num1,num2)
{
var reVal = num1 + num2;
this.alert(reVal);
}
</script>

不明白,可以继续问哦!
effective100 2009-01-08
  • 打赏
  • 举报
回复
<object id="MusicX" width=0 height=0 classid="clsid:951307F2-0122-441F-B5F3-514EE91BC781"> </object>
<script language="javascript" for="MusicX" event="Result(num1,num2)"> //类似与sink接收器,直观上说是和事件接口中Result方法进行配对。 HandleResult(num1,num2);
</script>

<script language="javascript" type="text/javascript">
function Play()
{
MusicX.Add(3, 5); //触发Fire,之后实质调用的是HandleResult(3, 5);
}

function HandleResult(num1,num2)
{
var reVal = num1 + num2;
this.alert(reVal);
}
</script>

不明白,可以继续问哦!
僵哥 2009-01-08
  • 打赏
  • 举报
回复
事件带参数没有测试过,不过ObjectID和Event最好用双引号括起来
类似于:
<script language="JavaScript" for="objSS" Event="OnTimer">

alert("OnTimer");

</script>

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧