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 相关文章推荐
JavaScript Archive Network 集合
May 12 Javascript
jquery下实现overlay遮罩层代码
Aug 25 Javascript
Ext 今日学习总结
Sep 19 Javascript
javascript getElementsByTagName
Jan 31 Javascript
javascript结合html5 canvas实现(可调画笔颜色/粗细/橡皮)的涂鸦板
Apr 27 Javascript
js使用栈来实现10进制转8进制与取除数及余数
Jun 11 Javascript
JavaScript中获取鼠标位置相关属性总结
Oct 11 Javascript
firefox浏览器用jquery.uploadify插件上传时报HTTP 302错误
Mar 01 Javascript
Bootstrap整体框架之CSS12栅格系统
Dec 15 Javascript
JavaScript canvas实现围绕旋转动画
Nov 18 Javascript
微信小程序语音同步智能识别的实现案例代码解析
May 29 Javascript
11个Javascript小技巧帮你提升代码质量(小结)
Dec 28 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中mysql与mysqli的区别分析
2013/06/10 PHP
从wamp到xampp的升级之路
2015/04/08 PHP
php基于SQLite实现的分页功能示例
2017/06/21 PHP
javascript对象的property和prototype是这样一种关系
2007/03/24 Javascript
JQUERY操作JSON实例代码
2010/02/09 Javascript
jQuery中slideUp 和 slideDown 的点击事件
2015/02/26 Javascript
JavaScript实现Iterator模式实例分析
2015/06/09 Javascript
EasyUI的doCellTip实现鼠标放到单元格上提示单元格内容
2016/08/24 Javascript
前端跨域的几种解决方式总结(推荐)
2017/08/16 Javascript
详解Vue组件实现tips的总结
2017/11/01 Javascript
vue跳转页面的几种方法(推荐)
2020/03/26 Javascript
koa2 数据api中间件设计模型的实现方法
2020/07/13 Javascript
vue项目中企业微信使用js-sdk时config和agentConfig配置方式详解
2020/12/15 Vue.js
python套接字流重定向实例汇总
2016/03/03 Python
使用Python的Twisted框架构建非阻塞下载程序的实例教程
2016/05/25 Python
详解Python的Flask框架中的signals信号机制
2016/06/13 Python
100行Python代码实现自动抢火车票(附源码)
2018/01/11 Python
python实现创建新列表和新字典,并使元素及键值对全部变成小写
2019/01/15 Python
Python解析json代码实例解析
2019/11/25 Python
TensorFlow加载模型时出错的解决方式
2020/02/06 Python
pandas DataFrame运算的实现
2020/06/14 Python
一个不错的HTML5 Canvas多层点击事件监听实例
2014/04/29 HTML / CSS
伊利莎白雅顿官网:Elizabeth Arden
2016/10/10 全球购物
域名注册、建站工具、网页主机、SSL证书:Dynadot
2017/01/06 全球购物
德国街头和运动文化高品质商店:BSTN Store
2017/08/26 全球购物
英国时尚服饰电商:Boohoo
2017/10/12 全球购物
英国电视和家用电器购物网站:rlrdistribution.co.uk
2018/11/20 全球购物
行政部主管岗位职责
2013/12/28 职场文书
公司募捐倡议书
2014/05/14 职场文书
2014年教师节国旗下讲话稿
2014/09/10 职场文书
2014国庆节演讲稿:祖国在我心中(400字)
2014/09/25 职场文书
保研专家推荐信范文
2015/03/25 职场文书
公司行政管理制度范本
2015/08/05 职场文书
《兰兰过桥》教学反思
2016/02/20 职场文书
修改MySQL的数据库引擎为INNODB的方法
2021/05/26 MySQL
Python机器学习之底层实现KNN
2021/06/20 Python