JavaScript使用ACTIVEX控件引起崩溃问题的解决

问题

在本人目前的项目中,前端部分完全使用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控件“一起走”了。

JavaScript使用ACTIVEX控件引起崩溃问题的解决相关推荐

  1. javascript调用activex控件

    代码 <HTML> <BODY> <object classid="clsid:CA8A9780-280D-11CF-A24D-444553540000&quo ...

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

    VS2008 在IE8中 调试 ActiveX控件 无法进入断点的解决方法 设置VS2008和IE8 调试ATL MFC ActiveX控件 参考文章: (1)VS2008 在IE8中 调试 Acti ...

  3. 登入系统后加载ActiveX控件已被阻止的解决方法

     在登入系统之后,系统会自动加载控件,所以浏览器安全级别太高的话是无法加载的,所以要对浏览器进行设置,下面是在加载控件时经常出现的错误,如下图. ActiveX控件已被阻止 交互不安全的提示 浏览 ...

  4. 利用javascript判断浏览器是否已经安装ActiveX控件和是否禁止运行ActiveX控件

     从微软给IE打上SP2以后,当IE在打开一些含有ActiveX控件的网页是,不再像以前那样,弹出提示框,让用户选择是否安装控件:现在默认情况下给隐藏起来,普通用户根本不知道是怎么回事.公司产品同 ...

  5. ActiveX控件开发总结

    创建ActiveX工程: 可以使用VC建立MFC工程或者ATL工程来进行ActiveX控件开发.使用MFC方式建立,系统会自动实现一些ActiveX控件必须的接口,开发人员只需关注业务就可以了:使用A ...

  6. C#开发Activex控件--与JavaScript的互调

    实现了ActiveX控件之后,在网页上的使用方式一般为: <object id="grid" classid="clsid:9661B223-6188-4849-B ...

  7. ie浏览器运行JavaScript脚本打开Chrome浏览器ie配置启用ActiveX控件配置

    IE打开chrome浏览器脚本 window.onload=function () {var objShell = new ActiveXObject("WScript.Shell" ...

  8. VC ActiveX 控件 开发总结

    VC 制作ActiveX 控件(OCX) http://ileson.iteye.com/blog/1002910 1.vc6下建立一下activeX工程     详见http://hi.baidu. ...

  9. COM组件开发实践(七)---多线程ActiveX控件和自动调整ActiveX控件大小(上)

    声明:本文代码基于CodeProject的文章<A Complete ActiveX Web Control Tutorial>修改而来,因此同样遵循Code Project Open L ...

最新文章

  1. 程序员 35 岁就该退休了吗?
  2. dnf拍卖行计算机在线,DNF助手拍卖行在哪里 拍卖行物价实时查询
  3. mysql 没有选择数据库_没有选择数据库 – PHP和MySQL
  4. 引入Jaeger——使用
  5. oracle对查询结果求和_Oracle 闪回技术详解
  6. java jsonobject.parse_JSON.parseObject的几种用法
  7. Redis主从复制、哨兵模式和分布式集群
  8. 覆盖17类面试题小结
  9. 使用画图软件gunplot出现的问题和解决办法
  10. docker 修改启动命令_Docker映射详解,没问题了!
  11. esayUI实践的一些体会
  12. 关于IE浏览器无法正常使用的问题
  13. Python中使用seek方法来移动文件指针的位置
  14. Android实现随意拖动View效果
  15. Unable to read entire header; 80 bytes read; expected 512 bytes
  16. python中矩阵怎么表示_python中的列矩阵表示
  17. 如何在移动钱包中搭建一个小程序应用商店
  18. Jmeter断言-响应断言
  19. 最新最全论文合集——法律智能
  20. 解放前端工程师——手把手教你开发自己的自定义列表和自定义表单系列之一缘起

热门文章

  1. 嘿!我用python帮我干这些事
  2. IBatis.Net学习笔记六--再谈查询
  3. [Java入门笔记] Java语言基础(四):流程控制
  4. SVN 之 去掉SVN管理标记
  5. Android studio听云接入另外一种方式
  6. Unix Domain Socket 域套接字实现
  7. CSDN Blog V3.0.0.2升级公告
  8. Varnish页面缓存服务
  9. 实现-驼峰和下划线的转换 工具类
  10. office excel Query 功能