动态创建iframe导致内存不足

木有GGsMd 2012-05-15 03:14:00
我现在想做一个效果,就是主页里面嵌套一个iframe,根据左边的菜单栏选择的内容不同,iframe内的页面随之改变,现在采用的方式是点击一个菜单,然后动态创建一个iframe,加载一个jsp页面,然后点击另一个菜单加载另一个页面,为了提高速度,采用
了动态创建和动态销毁iframe的方式,这样却导致了ie最后内存泄露


//创建
var iframe = document.createElement("iframe");
iframe.src = pageURL;
document.getElementById("contentDiv").appendChild(iframe);
//销毁
tempFrame.src = blankPageURL;
tempFrame.contentWindow.document.write('');
tempFrame.contentWindow.document.clear();
tempFrame.contentWindow.close();
document.getElementById('contentDiv').removeChild(tempFrame);
tempFrame = null;
CollectGarbage();

请问有什么好的解决方法或者其他的方案来实现
...全文
287 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
木有GGsMd 2012-05-24
  • 打赏
  • 举报
回复
这个问题没人能够解决??????????还是不愿意阿
乌镇程序员 2012-05-17
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

引用 5 楼 的回复:

只有IE才支持CollectGarbage()方法,在IE下测试会崩溃吗?

不明白你为什么要动态创建、删除iframe元素,固定放置一个,默认为空白页,需要时动态修改src属性值不就可以了吗?

回复5楼,我确实是在IE下的,动态创建的原因是为了加快页面显示速度,因为有几个界面是用applet嵌在网页里的,销毁的时候十分慢,,你说的换src属性也是不行的……
[/Quote]

“别名”的意思是iframe、tempFrame指向同一个iframe对象吗?某个对象如果还存在引用,就不会被销毁。
木有GGsMd 2012-05-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

只有IE才支持CollectGarbage()方法,在IE下测试会崩溃吗?

不明白你为什么要动态创建、删除iframe元素,固定放置一个,默认为空白页,需要时动态修改src属性值不就可以了吗?
[/Quote]
回复5楼,我确实是在IE下的,动态创建的原因是为了加快页面显示速度,因为有几个界面是用applet嵌在网页里的,销毁的时候十分慢,,你说的换src属性也是不行的,我试过了出现的问题如1楼;另外你说的tempFrame只是个别名而已阿,不要纠结,我是在两个方法里的
木有GGsMd 2012-05-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

内存不足?
一会可以点一会不可以点?

什么意思?

第二点 猜是缓存的问题

blankPageURL+'?ran='+Math.random()

试试
[/Quote]
回复3楼,你说的问题是我问的两个问题,两个不同的方法,不要混淆,随机数处理试过了,不行的
木有GGsMd 2012-05-17
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

引用 8 楼 的回复:

引用 5 楼 的回复:

只有IE才支持CollectGarbage()方法,在IE下测试会崩溃吗?

不明白你为什么要动态创建、删除iframe元素,固定放置一个,默认为空白页,需要时动态修改src属性值不就可以了吗?

回复5楼,我确实是在IE下的,动态创建的原因是为了加快页面显示速度,因为有几个界面是用applet嵌在网页里的,销毁的时候十分慢……
[/Quote]
我最后都置空了tempFrame = null;
整个这个iframe对象已经不存在了,早已经被销毁了,这种动态创建的方式貌似内存增加是无法避免的,很多说法都说还是避免这样使用,所以我就换了第二种方法,那个通过改变src来加载不同页面时,点击一次可以加载出来,再点击一次又加载不出来了,然后再点击又可以加载出来的问题已经解决了,是因为我其他页面上造成的问题,和iframe没有关系,但是内存一直在增加的问题还是没有解决
乌镇程序员 2012-05-16
  • 打赏
  • 举报
回复
还有个疑问,销毁时你只销毁了tempFrame,并没有销毁iframe啊?
乌镇程序员 2012-05-16
  • 打赏
  • 举报
回复
只有IE才支持CollectGarbage()方法,在IE下测试会崩溃吗?

不明白你为什么要动态创建、删除iframe元素,固定放置一个,默认为空白页,需要时动态修改src属性值不就可以了吗?
001007009 2012-05-16
  • 打赏
  • 举报
回复
内存不足?
一会可以点一会不可以点?

什么意思?

第二点 猜是缓存的问题

blankPageURL+'?ran='+Math.random()

试试
木有GGsMd 2012-05-16
  • 打赏
  • 举报
回复
up!!
木有GGsMd 2012-05-15
  • 打赏
  • 举报
回复
没人知道吗?
我换了最简单的用一个iframe,通过改变src来加载不同页面时,点击一次可以加载出来,再点击一次又加载不出来了,然后再点击又可以加载出来,请问这是为什么????

87,907

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧