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 相关文章推荐
动态创建的表格单元格中的事件实现代码
Dec 30 Javascript
Javascript在IE和FireFox中的不同表现简析
Dec 03 Javascript
JQuery中dataGrid设置行的高度示例代码
Jan 03 Javascript
node.js中的fs.stat方法使用说明
Dec 16 Javascript
jQuery中fadein与fadeout方法用法示例
Sep 16 Javascript
jquery使用EasyUI Tree异步加载JSON数据(生成树)
Feb 11 Javascript
关于Javascript中document.cookie的使用
Mar 08 Javascript
详解基于Bootstrap+angular的一个豆瓣电影app
Jun 26 Javascript
详解最新vue-cli 2.9.1的webpack存在问题
Dec 16 Javascript
js循环map 获取所有的key和value的实现代码(json)
May 09 Javascript
JS根据json数组多个字段排序及json数组常用操作
Jun 06 Javascript
JavaScript代码压缩工具UglifyJS和Google Closure Compiler的基本用法
Apr 13 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中substr和substring的正确用法及相关参数的介绍
2015/12/16 PHP
Linux环境下php实现给网站截图的方法
2016/05/03 PHP
PHP基于mcript扩展实现对称加密功能示例
2019/02/21 PHP
PHP命名空间定义与用法实例分析
2019/08/14 PHP
tp5框架基于Ajax实现列表无刷新排序功能示例
2020/02/10 PHP
ThinkPHP5与单元测试PHPUnit使用详解
2020/02/23 PHP
jquery 页眉单行信息滚动显示实现思路及代码
2014/06/26 Javascript
Jquery Post处理后不进入回调的原因及解决方法
2014/07/15 Javascript
node.js中的fs.read方法使用说明
2014/12/17 Javascript
Bootstrap基本组件学习笔记之导航(10)
2016/12/07 Javascript
Angular中ng-options下拉数据默认值的设定方法
2017/06/21 Javascript
Nodejs 和Session 原理及实战技巧小结
2017/08/25 NodeJs
解决angularJS中input标签的ng-change事件无效问题
2018/09/13 Javascript
Vue中使用vux配置代码详解
2018/09/16 Javascript
js事件触发操作实例分析
2019/06/21 Javascript
vue中axios的二次封装实例讲解
2019/10/14 Javascript
JS面向对象之多选框实现
2020/01/17 Javascript
使用Vue 自定义文件选择器组件的实例代码
2020/03/04 Javascript
[00:48]食人魔魔法师至宝“金鹏之幸”全新模型和自定义特效展示
2019/12/19 DOTA
Python 文件和输入输出小结
2013/10/09 Python
python实现对一个完整url进行分割的方法
2015/04/29 Python
python实现按任意键继续执行程序
2016/12/30 Python
python使用phoenixdb操作hbase的方法示例
2019/02/28 Python
Django修改app名称和数据表迁移方案实现
2020/09/17 Python
Python离线安装各种库及pip的方法
2020/11/28 Python
Python实现中英文全文搜索的示例
2020/12/04 Python
Canvas实现保存图片到本地的示例代码
2018/06/28 HTML / CSS
美国知名艺术画网站:Art.com
2017/02/09 全球购物
阿里巴巴美国:Alibaba美国
2019/11/24 全球购物
主管职责范文
2013/11/09 职场文书
工地门卫岗位职责
2013/12/30 职场文书
中英文求职信范文
2015/03/19 职场文书
初三化学教学反思
2016/02/22 职场文书
python opencv通过4坐标剪裁图片
2021/06/05 Python
详解MySql中InnoDB存储引擎中的各种锁
2022/02/12 MySQL
使用CSS定位HTML元素的实现方法
2022/07/07 HTML / CSS