动态创建iframe导致内存不足

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

[code="java"]
//创建
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();
[/code]

请问有什么好的解决方法或者其他的方案来实现???

今天又尝试了直接在html中使用iframe,然后动态通过iframe.src来改变页面的方式,又出现了另一个问题:点击一次可以加载出来,再点击一次又加载不出来了,然后再点击又可以加载出来,请问这是为什么????

13个回答

IFRAME销毁是无法全部释放内存,所以最好不用IFRAME。如果确实要用IFRAME就使用你的第2种方式,尽量减少创建IFRAME。
建议使用iframe.contentWindow.location.replace(url)这个没有history或者
iframe.contentWindow.location = url.这个有history.

kunkkaCoco
kunkkaCoco 看了你的博客,感觉用起来太烦了
7 年多之前 回复
hzylyl2402
hzylyl2402 使用动态改变DOM的效果,右边是一个DIV,动态转变DIV中内容。自己手写, 或者可以使用一些Ajax框架,例如:ExtJs,JavaScriptMVC。又或者使用加载器 来完成右边内容的转变,例如:steal。最后,你可以使用后台的视图模板来动态 改变右边的内容。例如:velocity等。
7 年多之前 回复
kunkkaCoco
kunkkaCoco iframe确实是这样的,没办法啊,还有什么能够模拟iframe的效果呢?
7 年多之前 回复

若菜单项不多的话可以每个菜单项对应一个iframe,第一次点击菜单项是新建iframe,点击其他菜单时隐藏此iframe(display:none),再次点击此菜单项的话显示此iframe,若需刷新只需重新给iframe.src属性赋值即可,至于你说的那个“点击一次可以加载出来,再点击一次又加载不出来了,然后再点击又可以加载出来”是不是缓存的事儿 ,若是的话可以增加随机数处理。

直接改变iframe的src就可以了,创建销毁比较麻烦

你可以尝试使用Sitemesh框架的渲染术,可以实现你需要的功能,网上相关资料很多,当然如果需要我这里也有。

用ajax,jquery.load()方法都可以实现你的要求。
把你本来想创建的iframe换成DIV。然后点击菜单的时候,调用ajax或者.load,调用后台,返回数据之后,直接填充到DIV里即可。
后台返回可以直接指向一个JSP画面。那2个方法可以直接取到填充完数据的HTML代码。
$.post("www.baidu.com", null, function(result) {
$("#div").html(result);
})

[quote]这个方法我也试过,但是有一点,这个方法返回来的其实只是那个页面的一个字符串而已,里面的js代码那样就执行不了了 [/quote]
里面的JS代码都是在父画面加载的时候全部加载进去的。。。。
我给你说这个方法。都是我自己都曾经用过的。不是随口瞎说的。。。
你参照DWZ框架的设计原理就行了

[quote]这个方法我也试过,但是有一点,这个方法返回来的其实只是那个页面的一个字符串而已,里面的js代码那样就执行不了了 [/quote]
用jquery.load的话。返回的画面跟普通的jsp一样。可以直接在里面用标签。
而且也可以正常执行。

其实很简单。利用链接

把菜单链接的target设置为iframe的name对应值就OK了

为什么要动态创建呢。直接改变iframe的src不更好

[code="java"]document.getElementById("myfirame").src=url[/code]

Jquery有很多tab插件就能够实现这个功能。

kunkkaCoco
kunkkaCoco 其实他还是用的iframe,一样有内存问题
7 年多之前 回复
共13条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问