阅读:8854回复:6
求助!在Firefox中如何使用Javascript调用(使用)ActiveX控件的属性和方法
时间紧的大虾看标题就够了:)
。(尽管这个要求我都感觉很怪异,但还是辛苦各位了,有任何一点点想法或者提示都感激不禁啊) 在IE中,使用JS调用一个ActiveX控件的属性和方法比较简单,可是在Firefox中却遇到了问题。因为项目已经完成大量ActiveX控件,而且希望在FF中也能使用这些ActiveX控件。如果无法直接调用的话,能够间接利用这些ActiveX控件也可以。注意原来的项目网页的脚本是针对IE的,有大量调用ActiveX属性和方法的语句,不知道在FF下这些脚本应当怎样编写。 下面是我自己写的一个含有ActiveX控件(自己简单做的)的网页。我用的是win32OS,ff3.02b,使用了King的支持ActiveX的插件,如果只是显示控件是没有问题的,但就是不知道如何调用它的属性和方法。 <HTML> <head> <script language="JavaScript1.3"> function Validate(){ alert(document.getElementById("my_ActiveX").safeLevel+""); } function initial(){ Validate(); } </script> </head> <BODY onload="initial()"> <embed id="my_ActiveX" type="application/x-oleobject" border="0" width="800" height="600" clsid="{86294A93-AEDA-445E-87A2-FEEA4B0B7322}" > </BODY> </HTML> safeLevel是我在制作控件时添加的一个属性,Long长整型默认值0,做好之后注册,然后查询注册表得到clsid添到上面的代码中,所以这个地方是没有什么问题的,自己还写过一个IE的版本,运行正常,打开网页会看到一个警示框内容为字符0,说明在IE下能够正常获取该属性(当然与上面的调用方法不同)。但是使用FF打开上面的网页时,警告窗的内容是undefined,我想应该是ff中的JS认为safelevel这个属性不存在,因为document.getElementById("my_ActiveX").width时警告框会正常显示控件宽度,但是这个width属性只是控件作为一个html元素所具有的属性,并不是我在制作控件的时候定义的属性。上面的代码在ff的错误控制台中也没有错误和警告,让人无法继续下手…… 究竟该如何调用? |
|
1楼#
发布于:2008-03-15 14:36
安装个Firebug扩展调试JavaScript。。。。
Firefox本来就不支持ActiveX控件。 |
|
|
2楼#
发布于:2008-03-15 14:36
|
|
3楼#
发布于:2008-03-15 14:36
一个wmp的例子:
<!-- Internet Explorer * Windows Media Player ActiveX --> <object id="wmpAx" name="player1" classid="CLSID:6BF52A52-394A-11D3-B153-00C04F79FAA6" type="application/x-oleobject" width="320" height="320" codebase="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=6,4,5,715" standby="Loading Microsoft Windows Media Player components..."> <param name="url" value="http://members.aol.com/jrzycrim01/mozilla/wmp/vidtest-HS.wmv" /> <param name="autostart" value="false" /> <param name="ShowStatusBar" value="true" /> <param name="volume" value="100" /> <!-- For other browsers * Windows Media Player --> <!--[if !IE]> <--> <embed name="player1" type="application/x-mplayer2" height="320" width="320" showstatusbar="true" autostart="false" pluginspage="http://www.microsoft.com/windows/windowsmedia/" src="http://members.aol.com/jrzycrim01/mozilla/wmp/vidtest-HS.wmv"> <!--> <![endif]--> </object> 播放器代码要写两层。 对应的javascript: var player=false function setup() { if(!player) { var p1=document.getElementsByName("player1"); for(var x=0;x<p1.length;x++) { if(p1[x].controls) { player=p1[x]; break; } } } } // 播放 function play() { setup(); player.controls.play(); } // 暂停 function pause() { setup(); player.controls.pause(); } // 停止 function stop() { setup(); player.controls.stop(); } 这样在IE和Firefox(安装了新的wmp11 plungis)都能正常工作。 对于别的,如:realplayer、quicktime都有相应的脚本,你自己到他们的页面上找找。 其实关键的是怎样让浏览器正确访问到播放器,按标准一个document里只能有一个唯一的ID,所以用getElementById()是行不通的,因此上面的函数setup()就很关键。 |
|
4楼#
发布于:2008-03-15 14:36
谢谢楼上两位;
To2楼:小弟是是非要找到办法不可,呵呵 To3楼:虽然早就看过了 ,还是要谢谢你 |
|
5楼#
发布于:2008-03-15 14:36
找到方法没?
找到方法没?我也不知道怎么样解决的啊 |
|
6楼#
发布于:2008-03-15 14:36
http://www.iol.ie/~locka/mozilla/plugin.htm
这是最早的支持ActiveX的插件,你所要做的就是把它的源代码重新编译链接一遍,注意,源代码还是有几处错误的。学习OLE之后就会知道你没有必要实现这个插件的所有功能。出于机密我修改好的插件不能提供给你,甚至我自己都不能随意使用。所以还是你自己研究吧。如果你懂一点ATL并且精通OLE(尤其是容器部分)和XPCOM,那么你可以轻松看懂这个插件源码,找出其中的错误并且完善它。 |
|