我现在想做一个效果,就是主页里面嵌套一个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();请问有什么好的解决方法或者其他的方案来实现

解决方案 »

  1.   

    没人知道吗?
    我换了最简单的用一个iframe,通过改变src来加载不同页面时,点击一次可以加载出来,再点击一次又加载不出来了,然后再点击又可以加载出来,请问这是为什么????
      

  2.   

    内存不足?
    一会可以点一会不可以点?什么意思?第二点 猜是缓存的问题blankPageURL+'?ran='+Math.random()试试
      

  3.   

    只有IE才支持CollectGarbage()方法,在IE下测试会崩溃吗?不明白你为什么要动态创建、删除iframe元素,固定放置一个,默认为空白页,需要时动态修改src属性值不就可以了吗?
      

  4.   

    还有个疑问,销毁时你只销毁了tempFrame,并没有销毁iframe啊?
      

  5.   

    回复5楼,我确实是在IE下的,动态创建的原因是为了加快页面显示速度,因为有几个界面是用applet嵌在网页里的,销毁的时候十分慢,,你说的换src属性也是不行的,我试过了出现的问题如1楼;另外你说的tempFrame只是个别名而已阿,不要纠结,我是在两个方法里的
      

  6.   


    “别名”的意思是iframe、tempFrame指向同一个iframe对象吗?某个对象如果还存在引用,就不会被销毁。
      

  7.   

    我最后都置空了tempFrame = null;
    整个这个iframe对象已经不存在了,早已经被销毁了,这种动态创建的方式貌似内存增加是无法避免的,很多说法都说还是避免这样使用,所以我就换了第二种方法,那个通过改变src来加载不同页面时,点击一次可以加载出来,再点击一次又加载不出来了,然后再点击又可以加载出来的问题已经解决了,是因为我其他页面上造成的问题,和iframe没有关系,但是内存一直在增加的问题还是没有解决