有道理,您是否尝试过检查after
函数返回的页面的来源?没有更多的 body 标签了 - 你的事件监听器(或者可能仍然在内存中,无用地晃来晃去)。
尝试将其附加到window
.
window.onresize = function()
{
document.write((this.innerWidth/this.innerHeight)*100+'%');
};
现在在以前非常流行的浏览器的旧版本中,这(将事件侦听器附加到窗口对象)会导致内存泄漏。如果您需要, window 对象永远不会在此处真正销毁更多信息。
如何解决内存问题?
(function(win)
{
win.onresize = function()
{
document.write((this.innerWidth/this.innerHeight)*100+'%');
};
if (win.attachEvent)
{
win.attachEvent('onbeforeunload',(function(self)
{
return function freeMem()
{
self.onresize = null;
self.detachEvent('onbeforeunload',freeMem);
};
})(win));
return;
}
win.addEventListener('beforeunload',(functio(self)
{
return function freeMem()
{
self.onresize = null;
self.removeEventListener('beforeUnload',freeMem,false);
};
})(win),false);
})(this);//this points to current window
我知道,看起来很糟糕,但是我已经对此进行了测试,并且确实可以解决问题-感谢该 IE。win
严格来说,传递给的闭包self
可以省略,但我将其保留在其中以绝对确定,一旦onbeforeunload
事件触发,处理程序返回所有函数并且引用超出范围,因此 GC 没有理由不释放记忆。
在大多数情况下,这太过分了,但以防万一有人关心,我决定在这里发布...... :-P