今天认真测试了下easyui的一些兼容性问题,发现在ie9 ie10 首次加载的时候,会出现如下bug。如图所示:

认真看了下,我估计是脚本重复引用的问题,我用的iframe框架的模式。登陆系统后,桌面首页也加载了同样的jquery的脚本。

后来,我把加载首页的代码加了1毫秒的延迟,问题就解决了。代码如下:

setTimeout(function () {
            $("#tabs").tabs('add', {
                title: '个人桌面',
                content: createFrameByTab('/home/desktop.aspx'),
                iconCls: 'home'
            });
}, 1);

现在想想也有可能是tab内存泄露的问题。具体怎么解决呢?

easyui源码:

tab.panel("options").tab.remove();
//新增
var frame = $('iframe',tab);
     if(frame.length>0){
           frame[0].contentWindow.document.write('');
           frame[0].contentWindow.close();
           frame.attr('src', "about:blank");
           frame.remove();
     }
//
tab.panel("destroy");

参考:

IE9下用jquery tabs ,easyui tabs 等报SCRIPT5009错误
最近在做一个项目时用到了Jquery UI Tabs这个插件,在添加新标签时手工往tabs append了iframe页面,然后在iframe里用$("#tab").tabs('remove', selectedindex);方法移除标签时,IE9就会报SCRIPT5009错误,错误代码指向jquery.js 6784行,报“isNaN” 未定义,isNaN是JS原生函数,怎么会未定义呢?经过一番研究,终于发现了原来是iframe惹的祸,原因是IE在iframe元素的回收方面存在着bug,在通常情况下应该将该元素的src属性值修改为”abort:blank”,并手工将其从DOM树上移除,不然会造成内存泄露。打开jquery tabs的源码发现,Tabs插件在remove标签时直接将DIV panels移除,并没有对iframe做相应的处理,而iframe是div panels的子元素,直接删除就会造成上述的问题,于是修改源码加入以下代码:

var ifrm = panls.find("iframe"); //首先查找iframe
 
  if( ifrm.length > 0){//有iframe时
 
   var el = ifrm.get(0);
 
   el.contentWindow.document.write('');//清空iframe的内容
 
   el.contentWindow.close();//避免iframe内存泄漏
 
   ifrm.attr('src', "about:blank");
 
   ifrm.remove();
 
  }
 
问题 解决:)

web技术分享

easyui中jquery重复引用问题(tab内存泄露问题)的更多相关文章

  1. JavaScript中的垃圾回收机制与内存泄露

    什么是内存泄露? 任何编程语言,在运行时都需要使用到内存,比如在一个函数中, var arr = [1, 2, 3, 4, 5]; 这么一个数组,就需要内存. 但是,在使用了这些内存之后, 如果后面他 ...

  2. 解决FastJson中"$ref重复引用"的问题方法

    对象的引用重复使用造成了重复引用问题,Fastjson默认开启引用检测将相同的对象写成引用的形式: 1 2 3 4 5 {"$ref": "$"} // 引用根 ...

  3. cocos2d-x 从onEnter、onExit、 引用计数 谈内存泄露问题

    /////////////////////////////////// //author : zhxfl //date   : 2013.8.29 //email  : 291221622@qq.co ...

  4. Chrome V8系列--浅析Chrome V8引擎中的垃圾回收机制和内存泄露优化策略

    V8 实现了准确式 GC,GC 算法采用了分代式垃圾回收机制.因此,V8 将内存(堆)分为新生代和老生代两部分. 一.前言 V8的垃圾回收机制:JavaScript使用垃圾回收机制来自动管理内存.垃圾 ...

  5. 关于lua闭包导致引用无法释放内存泄露

    最近项目存在严重的内存泄漏问题,每次切level 会增加20M无法释放的内存,翻遍了项目用了多个工具,查询资料等 发现项目中两种存在内存泄露的情况 1.lua闭包的不当使用,对比包的引用要及时 释放. ...

  6. 查找C++代码中某一范围内的内存泄露

    #include <string.h> #define _CRTDBG_MAP_ALLOC #include <crtdbg.h> int _tmain(int argc, _ ...

  7. 九、Android学习笔记_ Android开发中使用软引用和弱引用防止内存溢出

    在<Effective Java 2nd Edition>中,第6条“消除过期的对象引用”提到,虽然Java有 垃圾回收机制,但是只要是自己管理的内存,就应该警惕内存泄露的问题,例如的对象 ...

  8. Android学习笔记_78_ Android开发中使用软引用和弱引用防止内存溢出

    在<Effective Java 2nd Edition>中,第6条“消除过期的对象引用”提到,虽然Java有 垃圾回收机制,但是只要是自己管理的内存,就应该警惕内存泄露的问题,例如的对象 ...

  9. 简单说说.Net中的弱引用

    弱引用是什么? 要搞清楚什么是弱引用,我们需要先知道强引用是什么.强引用并不是什么深奥的概念,其实我们平时所使用的.Net引用就是强引用.例如: Cat kitty = new Cat(); 变量ki ...

随机推荐

  1. 延迟jquery,ready事件触发的时间

    $.holdReady(true);//holdReady必须在ready()方法调用之前来调用,来延迟ready()方法的执行 $(document).ready(function(){ conso ...

  2. hdu2097

    #include <stdio.h> int sum1(int n,int sign){ ; while(n){ sum+=n%sign; n/=sign; } return sum; } ...

  3. fstab

    开机后,挂载windows盘失败, 进入了一个检测shell,该shell下是以只读方式挂载根分区的,要使fstab可写,要执行mount -o remount,rw / /etc/fstab文件的解 ...

  4. POJ C程序设计进阶 编程题#6:流感传染

    编程题#6:流感传染 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 有一批 ...

  5. linux下多ISP的策略路由

    http://kerry.blog.51cto.com/172631/385578/ 修改/etc/iproute2/rt_tables 先在 /etc/iproute2/rt_tables 下建兩個 ...

  6. 第一部分 CLR基础:第3章 共享程序集和强命名程序集

    第一部分 CLR基础:第3章 共享程序集和强命名程序集

  7. 学习web前端开发感想

    1.学习一个技术,不是一看见源代码就是copy,而是仔细阅读后,找到自己想要的,并且自己写出来,自己理解了,下次遇到同样的问题,自己才能解决. 2.在电脑上学习的过程中,我总是先建立一个文本文档,这样 ...

  8. WinForm界面布局控件WeifenLuo.WinFormsUI.Docking"的使用 (二)

    WinForm界面布局控件WeifenLuo.WinFormsUI.Docking"的使用 (二) 编写人:CC阿爸 2015-1-29 今天我想与大家继续一起分享这一伟大的控件.有兴趣的同 ...

  9. PHP导出excel文件

    现在教教你如何导入excel文件: 在我的文件储存里面有一个com文件夹的,将其解压放在ThinkPHP/Library/文件夹里面,然后就是写控制器啦!去调用这个插件: <?php names ...

  10. PHP实现的一分页工具类代码

    总的页数是一个长度一定的木块,这把尺子在这个木块上滑动,前提,尺子的两端不能超出木块:D.发现这么一来要做的事情就是去找这个尺子在木块上的起始点,根据用户给传进来的page变量.哈哈,关键代码下面: ...