EXTJS内使用ACTIVEX控件引起崩溃问题的解决方法_extjs

问题
在本人目前的项目中,前端部分完全使用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!

时间: 2024-10-23 18:51:17

EXTJS内使用ACTIVEX控件引起崩溃问题的解决方法_extjs的相关文章

VS2008 在IE8中 调试 ActiveX控件 无法进入断点的解决方法 设置VS2008和IE8 调试ATL MFC ActiveX控件

设置VS2008和IE8 调试ATL控件   VS2008设置篇:     设置VS2008 通过IE8 调试ATL的ActiveX控件的步骤如下: (1)       设置项目属性 通过菜单项 "项目->你的项目属性"如下图: (2)       在弹出的属性页对话框中选中"配置属性->调试",在右边填入下列参数: 命令         :C:\Program Files\Internet Explorer\iexplore.exe(你的IE8执行文件

Asp.Net控件加载错误的解决方法

 开发基于Asp.Net的系统,最初使用R.a.d Treeview 2.5,经常会出现控件无法加载的情况.原以为是控件本身的问题,可后来将R.a.d Treeview升级到3.0版,还是无法解决.去Terelik官方网站看了F.A.Q,也没有提到这个问题.    后来发现,当出现控件无法加载的情况之后,只要Restart系统,或者等一会儿重新编译执行程序,控件无法加载的情况即消失了.难道是Framework的问题?怕我们编程太累,让我们中间休息一下?郁闷.......     今天偶然间发现如

使用JavaScript脚本无法直接改变Asp.net中Checkbox控件的Enable属性的解决方法_javascript技巧

 今天工作中遇到个小问题,情况如下,当我在后台页面中设置Checkbox的Enable的值为false时,我在前端页面中使用脚本(chk.disabled = false),无法改变disabled的值为false,代码如下:  前台代码: <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> <scri

.net 引用控件出现未知服务器标签解决方法

当在项目当中创建一个自定义控件时,有时会出现服务器标签错误的提示.那是因为需要在web.config文件中的 configuration>system.web>pages>controls下面要添加对控件标签的说明   <pages>   <controls>    <add tagprefix="asp教程" namespace="system.web.ui" assembly="system.web.ex

Aforge.net 中添加控件问题,希望得到解决方法~

问题描述 图一:图二:VS2015win1064位,在工具箱添加Aforge.control.dll时,提示没有可用的组件(如上第一张图).已经添加了引用(如第二张图所示)上网搜资料没发现解决的方法.希望能在这找到解决方法.谢谢大家了~~~~~ 解决方案 解决方案二:知道问题所在了..已解决解决方案三:楼主如何解决的?能否告诉我一下谢谢

document.getElementById获取控件对象为空的解决方法_基础知识

1.下面是一个简单的例子,页面加载时显示一段信息 复制代码 代码如下: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>      <

jQuery选中select控件 无法设置selected的解决方法_jquery

解决办法:把选中option的语句放到setTimeout中,例: 复制代码 代码如下: setTimeout(function() { var selSorts = $("select[id^='" + controls.selsort + "']"); $.each(selSorts, function(index, sort) { var ope = $(sort).find("option[value='" + arrSort[index

Extjs列表详细信息窗口新建后自动加载解决方法_extjs

在Extjs中,在当前页面的grid页新建了一行数据后,通过表单形式进入详细页面的编辑,此时,为了能让页面自动打开详细页面编辑,我花了三个小时,终于找到了在Extjs下最合适的方案,结果却只有三句话,我想,这可能也是很多Extjs爱好者们想要知道或者已经知道的,为此,将其与大家分享,只求为extjs群体贡献自己的一些想法. 列表在创建后,一般会有一个提示,现在我把我最开始的几个思路与大家讲讲,想直接看结果的可以跳到最后一套方案~ 方案1(放弃). 在新建数据后,向createform方法传送一个

基于MFC的ActiveX控件开发

ActiveX 控件是基于组件对象模型 (COM) 的可重用软件组件,广泛应用于桌面及Web应用中.在VC下ActiveX控件的开发可以分为三种,一种是直接用COM的API来开发,这样做显然非常的麻烦,对程序员要求也非常高,因此一般是不予考虑的:一种是基于传统的MFC,采用面向对象的方式将COM的基本功能封装在若干MFC的C++类中,开发者通过继承这些类得到COM支持功能.MFC为广大VC程序员所熟悉,易于上手学习,但缺点是MFC封装的东西比较多,因此用MFC开发出来的控件相对会比较大,因此比较