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 相关文章推荐
List Information About the Binary Files Used by an Application
Jun 11 Javascript
FLASH 广告之外的链接
Dec 16 Javascript
Jquery的Tabs内容轮换效果实现代码,几行搞定
Feb 12 Javascript
js 加密压缩出现bug解决方案
Nov 25 Javascript
jQuery操作DOM之获取表单控件的值
Jan 23 Javascript
详解jQuery中ajax.load()方法
Jan 25 Javascript
react中的ajax封装实例详解
Oct 17 Javascript
JS常用的几种数组遍历方式以及性能分析对比实例详解
Apr 11 Javascript
浅析前端路由简介以及vue-router实现原理
Jun 01 Javascript
js动态获取时间的方法分析
Aug 02 Javascript
优化Vue中date format的性能详解
Jan 13 Javascript
从表单校验看JavaScript策略模式的使用详解
Oct 17 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
阿拉伯的咖啡与水烟
2021/03/03 咖啡文化
用PHP写的MySQL数据库用户认证系统代码
2007/03/22 PHP
php 接口类与抽象类的实际作用
2009/11/26 PHP
PHP 处理TXT文件(打开/关闭/检查/读取)
2013/05/13 PHP
PHP+shell脚本操作Memcached和Apache Status的实例分享
2016/03/11 PHP
laravel 解决路由除了根目录其他都404的问题
2019/10/18 PHP
Jquery 组合form元素为json格式,asp.net反序列化
2009/07/09 Javascript
jquery实用代码片段集合
2010/08/12 Javascript
jQuery选择器的工作原理和优化分析
2011/07/25 Javascript
iframe父页面获取子页面参数的方法
2014/02/21 Javascript
jquery.hotkeys监听键盘按下事件keydown插件
2014/05/11 Javascript
Javascript中的数组常用方法解析
2016/06/17 Javascript
KnockoutJS 3.X API 第四章之事件event绑定
2016/10/10 Javascript
利用JS实现文字的聚合动画效果
2017/01/22 Javascript
Nodejs--post的公式详解
2017/04/29 NodeJs
jquery写出PC端轮播图实例
2018/01/26 jQuery
解决vue多个路由共用一个页面的问题
2018/03/12 Javascript
Vue2.0点击切换类名改变样式的方法
2018/08/22 Javascript
JavaScript惰性载入函数实例分析
2019/03/27 Javascript
Python的标准模块包json详解
2017/03/13 Python
Python 查看文件的读写权限方法
2018/01/23 Python
解决Python requests库编码 socks5代理的问题
2018/05/07 Python
Python应用库大全总结
2018/05/30 Python
浅谈Pycharm调用同级目录下的py脚本bug
2018/12/03 Python
Python计算不规则图形面积算法实现解析
2019/11/22 Python
Python函数的定义方式与函数参数问题实例分析
2019/12/26 Python
pytorch模型预测结果与ndarray互转方式
2020/01/15 Python
python连接打印机实现打印文档、图片、pdf文件等功能
2020/02/07 Python
pytorch 移动端部署之helloworld的使用
2020/10/30 Python
护士自我评价
2014/02/01 职场文书
岗位聘任报告
2015/03/02 职场文书
学术会议通知
2015/04/15 职场文书
法制主题班会教案
2015/08/13 职场文书
《玩出了名堂》教学反思
2016/02/17 职场文书
python办公自动化之excel的操作
2021/05/23 Python
用python画城市轮播地图
2021/05/28 Python