easyui中jquery重复引用问题(tab内存泄露问题)
今天认真测试了下easyui的一些兼容性问题,发现在ie9 ie10 首次加载的时候,会出现如下bug。如图所示:
1K)32ZACJ1%7D]X.jpg)

认真看了下,我估计是脚本重复引用的问题,我用的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();
}
问题 解决:)
easyui中jquery重复引用问题(tab内存泄露问题)的更多相关文章
- JavaScript中的垃圾回收机制与内存泄露
什么是内存泄露? 任何编程语言,在运行时都需要使用到内存,比如在一个函数中, var arr = [1, 2, 3, 4, 5]; 这么一个数组,就需要内存. 但是,在使用了这些内存之后, 如果后面他 ...
- 解决FastJson中"$ref重复引用"的问题方法
对象的引用重复使用造成了重复引用问题,Fastjson默认开启引用检测将相同的对象写成引用的形式: 1 2 3 4 5 {"$ref": "$"} // 引用根 ...
- cocos2d-x 从onEnter、onExit、 引用计数 谈内存泄露问题
/////////////////////////////////// //author : zhxfl //date : 2013.8.29 //email : 291221622@qq.co ...
- Chrome V8系列--浅析Chrome V8引擎中的垃圾回收机制和内存泄露优化策略
V8 实现了准确式 GC,GC 算法采用了分代式垃圾回收机制.因此,V8 将内存(堆)分为新生代和老生代两部分. 一.前言 V8的垃圾回收机制:JavaScript使用垃圾回收机制来自动管理内存.垃圾 ...
- 关于lua闭包导致引用无法释放内存泄露
最近项目存在严重的内存泄漏问题,每次切level 会增加20M无法释放的内存,翻遍了项目用了多个工具,查询资料等 发现项目中两种存在内存泄露的情况 1.lua闭包的不当使用,对比包的引用要及时 释放. ...
- 查找C++代码中某一范围内的内存泄露
#include <string.h> #define _CRTDBG_MAP_ALLOC #include <crtdbg.h> int _tmain(int argc, _ ...
- 九、Android学习笔记_ Android开发中使用软引用和弱引用防止内存溢出
在<Effective Java 2nd Edition>中,第6条“消除过期的对象引用”提到,虽然Java有 垃圾回收机制,但是只要是自己管理的内存,就应该警惕内存泄露的问题,例如的对象 ...
- Android学习笔记_78_ Android开发中使用软引用和弱引用防止内存溢出
在<Effective Java 2nd Edition>中,第6条“消除过期的对象引用”提到,虽然Java有 垃圾回收机制,但是只要是自己管理的内存,就应该警惕内存泄露的问题,例如的对象 ...
- 简单说说.Net中的弱引用
弱引用是什么? 要搞清楚什么是弱引用,我们需要先知道强引用是什么.强引用并不是什么深奥的概念,其实我们平时所使用的.Net引用就是强引用.例如: Cat kitty = new Cat(); 变量ki ...
随机推荐
- SQLserver2008使用表达式递归查询(由父往子,由子往父)
SQLserver2008使用表达式递归查询语句 --由父项递归下级 with cte(id,parentid,text) as (--父项 select id,parentid,text from ...
- 2.1Android底层开发需要哪些工具
开发.测试和调试Linux驱动.HAL程序库需要的工具: (1)JDK6或以上版本: (2)Eclipse3.4或以上版本: (3)ADT(用于开发Android应用程序): (4)CDT(用于开发A ...
- Distant Supervision for relation extraction without labeled data
Distant Supervision for relation extraction without labeled data 远程监督:使用未标注语料做关系抽取 1. 背景: 关系抽取(某个人是否 ...
- C#基础-ref、out
1.默认情况下,C#假定所有的方法参数传递都是传值的. 如下面的方法: public static void Main(string[] args) { int val = 5; //调用AddVal ...
- JavaScript高级 面向对象的程序设计 (二)《JavaScript高级程序设计(第三版)》
二.继承 OO是面向对象语言最为有魅力的概念.一般的OO语言都实现了两种继承,接口继承和实现继承.接口继承只继承方法签名,而实际继承继承了实际的方法. 而在JS中,函数没有签名,所以无法实现接口继承. ...
- Js 访问Aspnet后台页面变量
一.普通WebForm页面 <html xmlns="http://www.w3.org/1999/xhtml"><head runat="server ...
- 反编译工具(.NET Reflector )
1.下载安装原程序,然后运行 Reflector.exe 2.运行注册机,点击 Generate 获得序列号 3.把序列号填写到 Reflector 软件上4.断开网络,点击 Activate 激活( ...
- 深入浅出MongoDB(一)NoSQL
从本文开始,我们一起学习一下MongoDB相关内容,在学习MongoDB之前,首先要做的就是学习NoSQL. 为什么要学习NoSQL,原因很简单,因为MongoDB是NoSQL数据库的一种,换言之,如 ...
- HBase分布式安装
安装HBase之前需要先安装Hadoop,因为HBase是运行在Hadoop集群上的.安装Hadoop可以参照http://www.cnblogs.com/stGeekpower/p/3307289. ...
- 更强的微光闪烁效果--第三方开源--Shimmer-android
Shimmer-android在github上的项目主页是:https://github.com/RomainPiel/Shimmer-android Shimmer-android干脆在Androi ...