|
<html> <head> <meta http-equiv="refresh" content="1;" /> <script type="text/javascript">
function GridX2Event(){ this.Pool = []; }
GridX2Event.prototype.add = function(obj,evt,listener){ if (obj.addEventListener){ obj.addEventListener(evt,listener, false); } else if (obj.attachEvent){ obj.attachEvent(evt, listener); // IE¿ë, Gird ActiveX ÀÇ °æ¿ì ÇØ´ç ÇÔ¼ö¸¸ ÀÛ¿ëÀÌ µÊ. ÀÌÀ¯ ¸ð¸£°Ú½¿. } this.Pool.push([obj,evt,listener]); }
GridX2Event.prototype.removeGrid = function(obj,evt,listener){ this.remove(obj,evt,listener); }
GridX2Event.prototype.remove = function(obj,evt,listener){ if (obj.removeEventListener){ obj.removeEventListener(evt,listener, false); } else if (obj.detachEvent){ obj.detachEvent(evt, listener); } }
// IE, Firefox Memory Leak ó¸® // // http://support.microsoft.com/kb/830555 // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/IETechCol/dnwebgen/ie_leak_patterns.asp
GridX2Event.prototype.cleanUp = function(){ var _poolsize = GridX2Event.Pool.length; if(_poolsize>0){ var el = null; for(var i=0;i<_poolsize;i++){ el = GridX2Event.Pool.pop(); GridX2Event.remove.apply(GridX2Event,el); } } }
var GridX2Event = new GridX2Event(); GridX2Event.add(window,"onunload",GridX2Event.cleanUp);
window.onload=function(evt){ var element = document.getElementById("my-element"); var fnc=function(){ alert("Clicked: " + element.innerHTML); };
GridX2Event.add(element,"onclick",fnc);
/*Make sure we see the leak*/ element.bigString = new Array(10000).join(new Array(200).join("XXXXX")); }; </script> </head> <body> <div id="my-element">click me</div> </body> </html> |