动态创建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来改变页面的方式,又出现了另一个问题:点击一次可以加载出来,再点击一次又加载不出来了,然后再点击又可以加载出来,请问这是为什么????

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

若菜单项不多的话可以每个菜单项对应一个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插件就能够实现这个功能。

iframe在IE6下有内存泄漏,我解决IE6是这样,但这样还是会有些内存泄漏,但没不处理严重
/**
* 跳转URL并回收资源
*/
function gotoUrl( id, url ) {
var el = document.getElementById( id ), iframe = el.contentWindow;
if( el ) {
if( $.browser.msie ) {
el.src = 'about:blank';
try {
iframe.document.write( '' );
iframe.close();
} catch( e ) {
}
}
el.src = url;
}
}

menu

iframe不推荐使用。你要实现的功能,用ajax实现不可以吗。