兄弟 我做个管理系统,点主框架上的菜单 打开的一个新窗口 新窗口是以javascript动态创建一个新iframe的形式(类似一个tabcontrol的效果,只不过每个tabPage都是个iframe,和126.com效果一样)今天测试突然发现创建一个新iframe浏览器多占用内存3M,但是关闭该iframe
内存并没有减少,这样不断的打开关闭再打开,浏览器占用内存一直增加,
怎么办啊???关闭iframe的方法 document.getElementById("frameId").removeNode(true);
浏览器是IE

解决方案 »

  1.   

    关键是 在关闭iframe的时候 怎么销毁该iframe使用的资源?
      

  2.   

    不知道你指的关闭是什么
    如果display:noen visibily:hidden应该不释放资源
    得到iframe的父对象然后调用removeNode()如何
    试试看 
    ie似乎没有system.gc() 呵呵
      

  3.   

    你要把iframe中注册的事件取消掉,如:让window.eventFun = null;如果你用Prototype框架就不要考虑这个问题。他会自动取消注册。还有看下你页面有没有循环引用,让它们中的某个等于null,已取消循环
      

  4.   

    晕!iframe都是动态创建的 每个页面都不一样
      

  5.   

    呵呵,楼主的问题我以前也遇到,也想尽了办法都没成功,什么=null,removeNode,removeChild 等方法都用过了,但是没用,内存不会立即释放,但是每次销毁对象后大概10秒左右的时间,内存就降下来了
    后来在javascript高级程序设计一书里看到一下一段话.
    ------应用分界线-------
    ECMAScript里有无用存储单元收集程序,不必专门销毁对象来释放内存
    当该对象没有再被引用时,该对象就会被废除.
    每当函数执行完它的代码,无用存储单元收集程序都会运行,释放所有的局部变量,还有在一些不可预知情况下,无用存储单元收集程序也会运行
    ------应用分界线-------所以,如果楼主不在其他地方引用了iframe里的对象的话,楼主销毁应该是成功的,但是无用存储单元收集程序没有立即运行,所以没看到内存释放,应该是过了一会就可以看到内存将下来了
      

  6.   

    另外,对象销毁是个好习惯,因为在一些旧的浏览器里没有全面的无用存储单元收集程序,在卸载页面的时候可能不被正确销毁
    废除对象时候要当心,如果要正确废除一个对象,那要先把它所有的引用设置为null--出自javascript高级程序设计 一书
      

  7.   

    谢谢 fengruzhuo(傻大木) 不过我等了半天也没有见降下了如果 把该浏览器最小话 内存立即下降到2M
      

  8.   

    obj=document.getElementById( "frameId ")
    obj.src="javascript:false";
    obj.removeNode(true); 
    obj=null
    CollectGarbage();
    应该是可以的。
      

  9.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【hujunhua】截止到2008-07-03 23:25:03的历史汇总数据(不包括此帖):
    发帖的总数量:13                       发帖的总分数:210                      
    结贴的总数量:2                        结贴的总分数:40                       
    无满意结贴数:0                        无满意结贴分:0                        
    未结的帖子数:11                       未结的总分数:170                      
    结贴的百分比:15.38 %               结分的百分比:19.05 %                  
    无满意结贴率:0.00  %               无满意结分率:0.00  %                  
      

  10.   

    感觉不能即时释放,最小化后好点,用下面心里好过点
    obj.innerHTML=''
    obj.removeNode(true)
    obj=null
    delete obj
    CollectGarbage()
      

  11.   

    id=null就行了,Object都是这样销毁的啊