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 相关文章推荐
Save a File Using a File Save Dialog Box
Jun 18 Javascript
ExtJS 2.0实用简明教程 之Border区域布局
Apr 29 Javascript
禁止页面刷新让F5快捷键及右键都无效
Jan 22 Javascript
select多选 multiple的使用示例
Jun 16 Javascript
写给小白的JavaScript引擎指南
Dec 04 Javascript
jQuery弹出div层过2秒自动消失
Nov 29 Javascript
JS实现的简单轮播图运动效果示例
Dec 22 Javascript
常用的javascript设计模式
Jan 11 Javascript
flexslider.js实现移动端轮播
Feb 05 Javascript
jquery获取file表单选择文件的路径、名字、大小、类型
Jan 18 jQuery
vue项目中引入Sass实例方法
Aug 27 Javascript
如何实现iframe父子传参通信
Feb 05 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
PHP 操作文件的一些FAQ总结
2009/02/12 PHP
解析php中session的实现原理以及大网站应用应注意的问题
2013/06/17 PHP
php生成mysql的数据字典
2016/07/07 PHP
解决安装WampServer时提示缺少msvcr110.dll文件的问题
2017/07/09 PHP
解决Laravel5.x的php artisan migrate数据库迁移创建操作报错SQLSTATE[42000]
2020/04/06 PHP
PHP重载基础知识回顾
2020/09/10 PHP
有趣的javascript数组定义方法
2010/09/10 Javascript
在jQuery ajax中按钮button和submit的区别分析
2012/10/07 Javascript
js判断页面中是否有指定控件的简单实例
2014/03/04 Javascript
js获取页面传来参数的方法
2014/09/06 Javascript
jquery中toggle函数交替使用问题
2015/06/22 Javascript
jquery实现用户信息修改验证输入方法汇总
2015/07/18 Javascript
js实现的Easy Tabs选项卡用法实例
2015/09/06 Javascript
全面总结Javascript对数组对象的各种操作
2017/01/22 Javascript
JavaScript函数基础详解
2017/02/03 Javascript
vue移动端实现下拉刷新
2018/04/22 Javascript
Vue 使用中的小技巧
2018/04/26 Javascript
python 查找文件夹下所有文件 实现代码
2009/07/01 Python
简单介绍利用TK在Python下进行GUI编程的教程
2015/04/13 Python
编写Python脚本使得web页面上的代码高亮显示
2015/04/24 Python
Python语言实现获取主机名根据端口杀死进程
2016/03/31 Python
Python安装使用命令行交互模块pexpect的基础教程
2016/05/12 Python
python 性能优化方法小结
2017/03/31 Python
python3 图片referer防盗链的实现方法
2018/03/12 Python
python 对象和json互相转换方法
2018/03/22 Python
Python实现计算圆周率π的值到任意位的方法示例
2018/05/08 Python
基于DataFrame筛选数据与loc的用法详解
2018/05/18 Python
详解centos7+django+python3+mysql+阿里云部署项目全流程
2019/11/15 Python
Python日志logging模块功能与用法详解
2020/04/09 Python
解决Python在导入文件时的FileNotFoundError问题
2020/04/10 Python
Flask中sqlalchemy模块的实例用法
2020/08/02 Python
e路東瀛(JAPANiCAN)香港:日本旅游、日本酒店和温泉旅馆预订
2018/11/21 全球购物
热爱祖国演讲稿
2014/05/04 职场文书
捐书倡议书
2014/08/29 职场文书
认错检讨书
2014/10/02 职场文书
安全月宣传标语
2014/10/07 职场文书