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 相关文章推荐
拖动Html元素集合 Drag and Drop any item
Dec 22 Javascript
一个不错的用JavaScript实现的UBB编码函数
Mar 09 Javascript
jquery 插件 任意位置浮动固定层
Dec 25 Javascript
js定时器的使用(实例讲解)
Jan 06 Javascript
jQuery 回车事件enter使用示例
Feb 18 Javascript
javascript中加var和不加var的区别 你真的懂吗
Jan 06 Javascript
浅谈Web页面向后台提交数据的方式和选择
Sep 23 Javascript
防止重复发送 Ajax 请求
Feb 15 Javascript
Bootstrap禁用响应式布局的实现方法
Mar 09 Javascript
JS简单实现点击按钮或文字显示遮罩层的方法
Apr 27 Javascript
Vue.js进阶知识点总结
Apr 01 Javascript
原生js实现九宫格拖拽换位
Jan 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获取一个字符串中间一部分字符的方法
2014/08/19 PHP
使用PHP Socket 编程模拟Http post和get请求
2014/11/25 PHP
PHP命令Command模式用法实例分析
2018/08/08 PHP
Firefox/Chrome/Safari的中可直接使用$/$$函数进行调试
2012/02/13 Javascript
Json字符串转换为JS对象的高效方法实例
2013/05/01 Javascript
z-blog SyntaxHighlighter 长代码无法换行解决办法(jquery)
2014/11/16 Javascript
jquery无限级联下拉菜单简单实例演示
2015/11/23 Javascript
javascript Slip.js实现整屏滑动的手机网页
2015/11/25 Javascript
使用vue.js开发时一些注意事项
2016/04/27 Javascript
js常用DOM方法详解
2017/02/04 Javascript
详解数组Array.sort()排序的方法
2020/05/09 Javascript
JavaScript中双符号的运算详解
2017/03/12 Javascript
用react-redux实现react组件之间数据共享的方法
2018/06/08 Javascript
Vue项目添加动态浏览器头部title的方法
2018/07/11 Javascript
JS加密插件CryptoJS实现的DES加密示例
2018/08/16 Javascript
Vue中div contenteditable 的光标定位方法
2018/08/25 Javascript
基于vue循环列表时点击跳转页面的方法
2018/08/31 Javascript
微信小程序在线客服自动回复功能(基于node)
2019/07/03 Javascript
跟老齐学Python之类的细节
2014/10/13 Python
Python的Lambda函数用法详解
2019/09/03 Python
弄懂这56个Python使用技巧(轻松掌握Python高效开发)
2019/09/18 Python
Numpy与Pytorch 矩阵操作方式
2019/12/27 Python
python3 正则表达式基础廖雪峰
2020/03/25 Python
python opencv进行图像拼接
2020/03/27 Python
opencv+pyQt5实现图片阈值编辑器/寻色块阈值利器
2020/11/13 Python
ET Mall东森购物网:东森严选
2017/03/06 全球购物
伦敦所有西区剧院演出官方票务代理:Theatre Tickets Direct
2017/05/26 全球购物
外语学院毕业生的自我鉴定
2013/11/28 职场文书
绩效专员岗位职责
2013/12/02 职场文书
舞蹈比赛获奖感言
2014/02/04 职场文书
美术毕业生求职信
2014/02/25 职场文书
教师文明餐桌光盘行动倡议书
2015/04/28 职场文书
证婚人致辞精选
2015/07/28 职场文书
校运会班级霸气口号
2015/12/24 职场文书
2016党员干部政治学习心得体会
2016/01/23 职场文书
《画家和牧童》教学反思
2016/02/17 职场文书