EXTJS内使用ACTIVEX控件引起崩溃问题的解决方法


Posted in Javascript onMarch 31, 2010

问题
在本人目前的项目中,前端部分完全使用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控件“一起走”了。
GoodLuck!
Javascript 相关文章推荐
写的htc的数据表格
Jan 20 Javascript
caller和callee的区别介绍及演示结果
Mar 10 Javascript
jquery插件lazyload.js延迟加载图片的使用方法
Feb 19 Javascript
Javascript实现颜色rgb与16进制转换的方法
Apr 18 Javascript
Angularjs中如何使用filterFilter函数过滤
Feb 06 Javascript
javascript的BOM
May 03 Javascript
Bootstrap自动适应PC、平板、手机的Bootstrap栅格系统
May 27 Javascript
AngularJS操作键值对象类似java的hashmap(填坑小结)
Nov 12 Javascript
Javascript中document.referrer隐藏来源的方法
Jan 16 Javascript
微信小程序 setData的使用方法详解
Apr 20 Javascript
详解基于 axios 的 Vue 项目 http 请求优化
Sep 04 Javascript
基于vue+echarts 数据可视化大屏展示的方法示例
Mar 09 Javascript
ExtJS TabPanel beforeremove beforeclose使用说明
Mar 31 #Javascript
十个优秀的Ajax/Javascript实例网站收集
Mar 31 #Javascript
javascript中的107个基础知识收集整理 推荐
Mar 29 #Javascript
jquery CSS选择器笔记
Mar 29 #Javascript
Tinymce+jQuery.Validation使用产生的BUG
Mar 29 #Javascript
javascript delete 使用示例代码
Mar 29 #Javascript
JavaScript 格式字符串的应用
Mar 29 #Javascript
You might like
详解Yii2高级版引入bootstrap.js的一个办法
2017/03/21 PHP
javascript 计算两个整数的百分比值
2009/12/26 Javascript
通过继承IHttpHandle实现JS插件的组织与管理
2010/07/13 Javascript
利用javascript的面向对象的特性实现限制试用期
2011/08/04 Javascript
Jquery 模拟用户点击超链接或者按钮的方法
2013/10/25 Javascript
JS实现日期加减的方法
2013/11/29 Javascript
jquery手风琴特效插件
2015/02/04 Javascript
jQuery团购倒计时特效实现方法
2015/05/07 Javascript
JavaScript之cookie技术详解
2016/11/18 Javascript
用jQuery旋转插件jqueryrotate制作转盘抽奖
2017/02/10 Javascript
javascript中json对象json数组json字符串互转及取值方法
2017/04/19 Javascript
前端主流框架vue学习笔记第二篇
2017/07/26 Javascript
ES6 javascript的异步操作实例详解
2017/10/30 Javascript
[46:27]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#2LGD VS MVP.Phx第一局
2016/03/02 DOTA
Python中的Numpy入门教程
2014/04/26 Python
python递归函数绘制分形树的方法
2018/06/22 Python
Python2与Python3的区别实例总结
2019/04/17 Python
python实现删除列表中某个元素的3种方法
2020/01/15 Python
Python搭建Keras CNN模型破解网站验证码的实现
2020/04/07 Python
浅谈在JupyterNotebook下导入自己的模块的问题
2020/04/16 Python
如何基于Python爬取隐秘的角落评论
2020/07/02 Python
利用css3画个同心圆示例代码
2017/07/03 HTML / CSS
英国最大的高品质珠宝和手表专家:Goldsmiths
2017/03/11 全球购物
约瑟夫·特纳男装:Joseph Turner
2017/10/10 全球购物
斯德哥尔摩通票:Stockholm Pass
2018/01/09 全球购物
介绍一下.net和Java的特点和区别
2012/09/26 面试题
教师自荐信
2013/12/10 职场文书
实习鉴定评语
2014/01/19 职场文书
捐款倡议书格式范文
2014/05/14 职场文书
小学安全汇报材料
2014/08/14 职场文书
2014年“四风”问题个人整改措施
2014/09/17 职场文书
镇党政领导班子民主生活会思想汇报
2014/10/11 职场文书
升职自我推荐信范文
2015/03/25 职场文书
2019年大学推荐信
2019/06/24 职场文书
MYSQL 的10大经典优化案例场景实战
2021/09/14 MySQL
英镑符号 £
2022/02/17 杂记