JavaScript使用ACTIVEX控件引起崩溃问题的解决
JavaScript使用ACTIVEX控件引起崩溃问题的解决
问题
在本人目前的项目中,前端部分完全使用EXTJS基于“One-Page”理念搭建。除了一个HTML作为基本容器外,就全是JS文件了(页面是由JS文件实现的)。当用户切换页面时候,我们通过析构上一个页面对象,然后创建新页面对象并展现在HTML中。基于这种架构,我们还引入了一个ActiveX控件,用于展现报表。这一引入,问题就出来了:只要是访问有报表控件存在的页面,用户切换2次页面,IE就会崩溃(FF无此问题),百试不爽。
原因
因为系统设计时考虑到了资源释放,专门处理过析构部分,而且无ActiveX的页面不存在问题。故问题肯定是出在IE对包含在JS中的ActiveX控件释放出了问题。毕竟在传统的以HTML或JSP、PHP页搭建的前端中,ActiveX是属于页面的,只要用户一跳转,页面被Unload,其中的ActiveX也就销毁了;而我们的系统使用的是通过不断的重绘一张HTML页面实现跳转,也就是系统永不会刷新,也就没有Unload,ActiveX自然无法销毁,导致浏览器崩溃。
解决方法
知道了原因,我们就想想法子。既然IE无法帮我们销毁ActiveX控件。我们自己来就好了:
//@AcitveXObjectID: 要查找的节点范围,从此节点一下查找待删除的ActiveX。
//@ContianerID: 要删除的ActiveX控件ID。
function ActiveXKiller(AcitveXObjectID,ContianerID){
var ce=document.getElementById(ContianerID);
if (ce){
var cce=ce.children;
for(var i=0;i<cce.length;i=i+1){
if(cce[i].id==AcitveXObjectID){
ce.removeChild(cce[i]);
}
}
}
}
这个方法就是用来干掉ActiveX控件的。 原理也简单。就是根据给定的一个节点范围内(一般是ActiveX控件的父节点、容器), 用给定的ActiveX在Dom中的ID来逐级查找,一旦找到就手动Remove。
有了这个Killer,我们就能在页面重绘之前,先搞定ActiveX,避免了崩溃。
另外要提到的,有一个特殊情况。就是当你将一个ActiveX控件放在了一个Ext.Window 里。而天真地想让Ext.Window在关闭的时候顺带帮你把里面的ActiveX也销毁,就必须符合一个条件:
ActiveX的容器必须是Ext.Window本身。
也就是说:如果你将ActiveX控件放在一个Ext.Panel里,然后再放在Ext.Window里。就别指望Ext.Window关闭的时候可以带你的ActiveX控件“一起走”了。
JavaScript使用ACTIVEX控件引起崩溃问题的解决相关推荐
- javascript调用activex控件
代码 <HTML> <BODY> <object classid="clsid:CA8A9780-280D-11CF-A24D-444553540000&quo ...
- VS2008 在IE8中 调试 ActiveX控件 无法进入断点的解决方法 设置VS2008和IE8 调试ATL MFC ActiveX控件
VS2008 在IE8中 调试 ActiveX控件 无法进入断点的解决方法 设置VS2008和IE8 调试ATL MFC ActiveX控件 参考文章: (1)VS2008 在IE8中 调试 Acti ...
- 登入系统后加载ActiveX控件已被阻止的解决方法
在登入系统之后,系统会自动加载控件,所以浏览器安全级别太高的话是无法加载的,所以要对浏览器进行设置,下面是在加载控件时经常出现的错误,如下图. ActiveX控件已被阻止 交互不安全的提示 浏览 ...
- 利用javascript判断浏览器是否已经安装ActiveX控件和是否禁止运行ActiveX控件
从微软给IE打上SP2以后,当IE在打开一些含有ActiveX控件的网页是,不再像以前那样,弹出提示框,让用户选择是否安装控件:现在默认情况下给隐藏起来,普通用户根本不知道是怎么回事.公司产品同 ...
- ActiveX控件开发总结
创建ActiveX工程: 可以使用VC建立MFC工程或者ATL工程来进行ActiveX控件开发.使用MFC方式建立,系统会自动实现一些ActiveX控件必须的接口,开发人员只需关注业务就可以了:使用A ...
- C#开发Activex控件--与JavaScript的互调
实现了ActiveX控件之后,在网页上的使用方式一般为: <object id="grid" classid="clsid:9661B223-6188-4849-B ...
- ie浏览器运行JavaScript脚本打开Chrome浏览器ie配置启用ActiveX控件配置
IE打开chrome浏览器脚本 window.onload=function () {var objShell = new ActiveXObject("WScript.Shell" ...
- VC ActiveX 控件 开发总结
VC 制作ActiveX 控件(OCX) http://ileson.iteye.com/blog/1002910 1.vc6下建立一下activeX工程 详见http://hi.baidu. ...
- COM组件开发实践(七)---多线程ActiveX控件和自动调整ActiveX控件大小(上)
声明:本文代码基于CodeProject的文章<A Complete ActiveX Web Control Tutorial>修改而来,因此同样遵循Code Project Open L ...
最新文章
- 程序员 35 岁就该退休了吗?
- dnf拍卖行计算机在线,DNF助手拍卖行在哪里 拍卖行物价实时查询
- mysql 没有选择数据库_没有选择数据库 – PHP和MySQL
- 引入Jaeger——使用
- oracle对查询结果求和_Oracle 闪回技术详解
- java jsonobject.parse_JSON.parseObject的几种用法
- Redis主从复制、哨兵模式和分布式集群
- 覆盖17类面试题小结
- 使用画图软件gunplot出现的问题和解决办法
- docker 修改启动命令_Docker映射详解,没问题了!
- esayUI实践的一些体会
- 关于IE浏览器无法正常使用的问题
- Python中使用seek方法来移动文件指针的位置
- Android实现随意拖动View效果
- Unable to read entire header; 80 bytes read; expected 512 bytes
- python中矩阵怎么表示_python中的列矩阵表示
- 如何在移动钱包中搭建一个小程序应用商店
- Jmeter断言-响应断言
- 最新最全论文合集——法律智能
- 解放前端工程师——手把手教你开发自己的自定义列表和自定义表单系列之一缘起