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 相关文章推荐
ASP 过滤数组重复数据函数(加强版)
May 31 Javascript
Javascript中的回调函数和匿名函数的回调示例介绍
May 12 Javascript
简介JavaScript中的unshift()方法的使用
Jun 09 Javascript
Jquery修改image的src属性,图片不加载问题的解决方法
May 17 Javascript
深入理解bootstrap框架之入门准备
Oct 09 Javascript
JavaScript中常用的验证reg
Oct 13 Javascript
详解webpack编译多页面vue项目的配置问题
Dec 11 Javascript
vue-scroller记录滚动位置的示例代码
Jan 17 Javascript
20行JS代码实现粘贴板复制功能
Feb 06 Javascript
JS实现倒序输出的几种常用方法示例
Apr 13 Javascript
微信小程序获取位置展示地图并标注信息的实例代码
Sep 01 Javascript
vue 使用 vue-pdf 实现pdf在线预览的示例代码
Apr 26 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
2009/06/29 PHP
PHP正则表达式之捕获组与非捕获组
2015/11/06 PHP
Joomla使用Apache重写模式的方法
2016/05/04 PHP
Yii框架安装简明教程
2020/05/15 PHP
Jquery公告滚动+AJAX后台得到数据
2011/04/14 Javascript
Jquery中使用setInterval和setTimeout的方法
2013/04/08 Javascript
javascript的渐进增强与平稳退化浅谈
2013/11/12 Javascript
js的匿名函数使用介绍
2013/12/11 Javascript
jquery实现图片左右切换的方法
2015/05/07 Javascript
深入对Vue.js $watch方法的理解
2017/03/20 Javascript
微信小程序动态显示项目倒计时效果
2017/06/13 Javascript
vue绑定设置属性的多种方式(5)
2017/08/16 Javascript
解决betterScroll在vue中存在图片时,出现拉不动的问题
2018/09/27 Javascript
js实现随机数小游戏
2019/06/28 Javascript
vue+mock.js实现前后端分离
2019/07/24 Javascript
Vue快速实现通用表单验证功能
2019/12/05 Javascript
easyUI 实现的后台分页与前台显示功能示例
2020/06/01 Javascript
[13:25]VP vs VICI (BO3)
2018/06/07 DOTA
Python读取properties配置文件操作示例
2018/03/29 Python
Python函数定义及传参方式详解(4种)
2019/03/18 Python
Python3.5基础之变量、数据结构、条件和循环语句、break与continue语句实例详解
2019/04/26 Python
python 多进程共享全局变量之Manager()详解
2019/08/15 Python
乌克兰香水和化妆品网站:Notino.ua
2018/03/26 全球购物
Habitat家居英国官方网站:沙发、家具、照明、厨房和户外
2019/12/12 全球购物
Java servlet面试题
2012/03/04 面试题
教学实习自我评价
2014/01/28 职场文书
销售员岗位职责范本
2014/02/03 职场文书
项目合作意向书范本
2014/04/01 职场文书
党组织领导班子整改方案
2014/10/25 职场文书
2014保险公司个人工作总结
2014/12/09 职场文书
五年级小学生评语
2014/12/26 职场文书
纪录片信仰观后感
2015/06/08 职场文书
少先队入队仪式主持词
2015/07/04 职场文书
创业项目(超低成本创业项目)
2019/08/16 职场文书
详解Java ES多节点任务的高效分发与收集实现
2021/06/30 Java/Android
漫画「你在春天醒来」第10卷封面公开
2022/03/21 日漫