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 相关文章推荐
纯js实现的论坛常用的运行代码的效果
Jul 15 Javascript
ExtJs GridPanel简单的增删改实现代码
Aug 26 Javascript
10款新鲜出炉的 jQuery 插件(Ajax 插件,有幻灯片、图片画廊、菜单等)
Jun 08 Javascript
javaScript复制功能调用实现方案
Dec 13 Javascript
解决IE6的PNG透明JS插件使用介绍
Apr 17 Javascript
js字母大小写转换实现方法总结
Nov 13 Javascript
jQuery中常用的遍历函数用法实例总结
Sep 01 Javascript
Highcharts学习之数据列
Aug 03 Javascript
jquery编写日期选择器
Mar 16 Javascript
vue toggle做一个点击切换class(实例讲解)
Mar 13 Javascript
layui写后台表格思路和赋值用法详解
Nov 14 Javascript
关于IDEA中的.VUE文件报错 Export declarations are not supported by current JavaScript version
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
php 数组的创建、调用和更新实现代码
2009/03/09 PHP
在PHP中养成7个面向对象的好习惯
2010/07/17 PHP
浅析PHP 按位与或 (^ 、&amp;)
2013/06/21 PHP
php获取文件夹路径内的图片以及分页显示示例
2014/03/11 PHP
浅谈PHP中JSON数据操作
2015/07/01 PHP
PHP实现的QQ空间g_tk加密算法
2015/07/09 PHP
thinkphp框架表单数组实现图片批量上传功能示例
2020/04/04 PHP
PHP与Web页面交互操作实例分析
2020/06/02 PHP
fireworks菜单生成器mm_menu.js在 IE 7.0 显示问题的解决方法
2009/10/20 Javascript
浅谈JavaScript之事件绑定
2013/07/08 Javascript
JQuery 获取json数据$.getJSON方法的实例代码
2013/08/02 Javascript
如何用jquery控制表格奇偶行及活动行颜色
2014/04/20 Javascript
jquery实现select选中行、列合计示例
2014/04/25 Javascript
Javascript技术难点之apply,call与this之间的衔接
2015/12/04 Javascript
基于jquery实现表格内容筛选功能实例解析
2016/05/09 Javascript
Node.js的项目构建工具Grunt的安装与配置教程
2016/05/12 Javascript
简单实现JS上传图片预览功能
2017/04/14 Javascript
Node.js  REPL (交互式解释器)实例详解
2017/08/06 Javascript
js实现转动骰子模型
2019/10/24 Javascript
python标准算法实现数组全排列的方法
2015/03/17 Python
Python提取支付宝和微信支付二维码的示例代码
2019/02/15 Python
一文了解Python并发编程的工程实现方法
2019/05/31 Python
Python爬取豆瓣数据实现过程解析
2020/10/27 Python
李维斯德国官方网上商店:Levi’s德国
2016/09/10 全球购物
阿迪达斯俄罗斯官方商城:adidas俄罗斯
2017/03/08 全球购物
奥地利领先的在线药房:SHOP APOTHEKE
2019/10/07 全球购物
旅游管理毕业生自荐信
2013/11/05 职场文书
房地产销售员的自我评价分享
2013/12/04 职场文书
出纳员岗位责任制
2014/02/11 职场文书
服装促销活动方案
2014/02/23 职场文书
竞聘演讲稿怎么写
2014/08/28 职场文书
死者家属慰问信
2015/03/24 职场文书
2015年司机工作总结
2015/04/23 职场文书
世界十大评分最高的动漫,CLANNAD上榜,第八赚足人们眼泪
2022/03/18 日漫
Minikube搭建Kubernetes集群
2022/03/31 Servers
ICOM R71E和R72E图文对比解说
2022/04/07 无线电