非IE浏览器如何响应ActiveX控件的事件?

daily1980 2013-12-20 10:07:47
客户端安装了:ffactivex-setup-r39.exe
注册了基于MFC ActiveX的控件。
网页代码如下所示:
--------------------------------------------------------------------
function addEvent(element, type, handler) {
if (element.attachEvent) {
element.attachEvent('on'+type, handler);
}
else if (element.addEventListener) {
element.addEventListener(type, handler, false);
}
}

function onClose() {
alert('onClose');
}

function OnWindowLoad() {
try {
if (isIECore) {
jQuery('body').append('<object classid=\"clsid:D32FA94D-46C7-4948-863F-A8A79A47655C\" id=\"test\" width=\"200\" height=\"200\" style=\"display:\" ></object>');
}
else {
jQuery('body').append('<object clsid=\"{D32FA94D-46C7-4948-863F-A8A79A47655C}\" id=\"test\" width=\"200\" height=\"200\" type=\"application/x-itst-activex\" ></object>');
}
} catch (e) {}

addEvent('Colse', onClose);
}
--------------------------------------------------------------------
经测试,在IE内核的浏览器下,控件触发的‘Close’事件用响应,非IE内核的浏览器(谷歌、Firefox等)响应不了事件。
在网上查了一些资料,有的说谷歌等浏览器不支持ActiveX控件事件,有的说只能通过控件调用页面中的JS函数。
望有这方面经验的大牛们,给予一定帮助!!!
...全文
2363 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
wyx100 2014-08-15
  • 打赏
  • 举报
回复
引用 6 楼 xuddk727 的回复:
chrome下只能通过json扩展吧?还得再包一层,个人觉得要支持多浏览器就不要考虑activex了
阿源是少年 2014-08-15
  • 打赏
  • 举报
回复
引用 10 楼 Enigma_CN 的回复:
[quote=引用 8 楼 lgstudyvc 的回复:] 据说 谷歌、Firefox等、360、qq好像都是ie内核吧 js调用吧
好吧,恭喜微软一统江湖[/quote] 似乎不是如此,chrome用的是webkit引擎,非ie
baobings 2014-08-14
  • 打赏
  • 举报
回复
引用 13 楼 jijun1018 的回复:
是这样,我试了一下,在ie内核中这么写 <object id="configRtx" classid="CLSID:444DC682-2035-4D77-B1F7-B76447D94583" width="555" height="402" > </object> </div> </body> <script language="javascript"> function setInfo() { var configRtx = document.getElementById('configRtx'); alert(configRtx); configRtx.SetDvrInfo('...'); } </script> 这么写在ie下是好用的 但是我在谷歌下 <object id="configRtx" TYPE="application/xhanhan-activex" width="555" height="402" clsid="{444DC682-2035-4D77-B1F7-B76447D94583}" > </object> </div> </body> <script language="javascript"> function setInfo() { var configRtx = document.getElementById('configRtx'); alert(configRtx); alert(configRtx.SetDvrInfo); configRtx.SetDvrInfo('...'); } </script> </html> 提示不能将SetDvrInfo识别为一个函数,想问一下,现在应该怎么修改网页,谢谢
我现在也是这个问题,兄弟你是怎么解决的?麻烦告诉一下
jijun1018 2014-04-16
  • 打赏
  • 举报
回复
是这样,我试了一下,在ie内核中这么写 <object id="configRtx" classid="CLSID:444DC682-2035-4D77-B1F7-B76447D94583" width="555" height="402" > </object> </div> </body> <script language="javascript"> function setInfo() { var configRtx = document.getElementById('configRtx'); alert(configRtx); configRtx.SetDvrInfo('...'); } </script> 这么写在ie下是好用的 但是我在谷歌下 <object id="configRtx" TYPE="application/xhanhan-activex" width="555" height="402" clsid="{444DC682-2035-4D77-B1F7-B76447D94583}" > </object> </div> </body> <script language="javascript"> function setInfo() { var configRtx = document.getElementById('configRtx'); alert(configRtx); alert(configRtx.SetDvrInfo); configRtx.SetDvrInfo('...'); } </script> </html> 提示不能将SetDvrInfo识别为一个函数,想问一下,现在应该怎么修改网页,谢谢
jijun1018 2014-04-16
  • 打赏
  • 举报
回复
您好,我现在也在尝试使用非ie内核浏览器,看了您的经验,知道了页面怎么相应activex事件,想问一下,页面怎么调用activex的对外函数呢
碼上道 2013-12-29
  • 打赏
  • 举报
回复
oyljerry 2013-12-27
  • 打赏
  • 举报
回复
现在各家浏览器都有各自的插件格式,按他们各自开发会方便点
lgstudyvc 2013-12-27
  • 打赏
  • 举报
回复
据说 谷歌、Firefox等、360、qq好像都是ie内核吧 js调用吧
许文君 2013-12-27
  • 打赏
  • 举报
回复
chrome下只能通过json扩展吧?还得再包一层,个人觉得要支持多浏览器就不要考虑activex了
daily1980 2013-12-27
  • 打赏
  • 举报
回复
问题已经解决,非IE浏览器下通过ffactivex支持事件的,但与IE响应事件有点区别。 具体方法与大家分享一下: -------------------------------------------------- //增加事件 function addEvent(element, type, handler) { if (element.attachEvent) { try { element.attachEvent(type, handler); } catch (e) { alert('attachEvent ' + type + ' except!'); } } else if (element.addEventListener) { try { element.addEventListener(type, handler, false); } catch (e) { alert('addEventListener ' + type + ' except!'); } } } //增加控件 try { if (Ext.isIE) { jQuery('body').append('<div><object classid=\"clsid:2E8B4B9F-C698-40CC-9047-xxxxxxxxx\" id=\"testCtrl\" width=\"100%\" height=\"100%\" style=\"margin:0px;padding:0px;\" ></object></div>'); } else { jQuery('body').append('<div><object clsid=\"{2E8B4B9F-C698-40CC-9047-xxxxxxxxx}\" id=\"testCtrl\" width=\"100%\" height=\"100%\" style=\"margin:0px;padding:0px;\" TYPE=\"application/x-itst-activex\" event_事件名称=\"onxxxxxxxx\" ></object></div>'); } //绑定事件 addEvent(testCtrl, "事件名称", onxxxxxxxx); } catch (e) { } //事件树立函数 function onxxxxxxxx() { } --------------------------------------------------
Occam's_Razor 2013-12-27
  • 打赏
  • 举报
回复
引用 8 楼 lgstudyvc 的回复:
据说 谷歌、Firefox等、360、qq好像都是ie内核吧 js调用吧
好吧,恭喜微软一统江湖
sd__q 2013-12-20
  • 打赏
  • 举报
回复
微软搞出来的东西。。其他内核浏览器肯定支持的不好
wshcdr 2013-12-20
  • 打赏
  • 举报
回复
activex只有IE支持咧
redui 2013-12-20
  • 打赏
  • 举报
回复
只能说这个ffactivex没做好,或者楼主还没搞清楚它的用法
许文君 2013-12-20
  • 打赏
  • 举报
回复
不是IE内核一般情况下只能是换其他的方式

3,245

社区成员

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

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