SCRIPT5009: “Math”未定义 jquery.min.js, 行2 字符1711

jquery easy UI 在 ie9下,使用iframe遇到报错问题


ie9 对iframe的垃圾回收有bug

你的html面里应该有iframe 而且在画面里写了src="xxxx"
然后js里应该又把src给更改了
也就是导致iframe装载了两遍
而第一遍的dom资源 ie9貌似无法正常回收


我找到一个解决方法是
把画面那个iframe 的src属性去掉

然后在js里进行赋值 (

$(function(){

$('#iframe').attr('src','/home/page');

});



照上面那样做,某种程度上解决了部分问题

但是,在关闭tab时又会报错

在网上找到解决办法:修改easy ui的源码

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");



参见:http://www.csdn123.com/html/itweb/20130904/98428_98436_98430.htm

下面是copy过来的,实测有效


easyui中jquery重复引用问题(tab内存泄露问题)

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

11

认真看了下,我估计是脚本重复引用的问题,我用的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();
 
  }
 


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值