1/* 2 * FCKeditor - The text editor for Internet - http://www.fckeditor.net 3 * Copyright (C) 2003-2007 Frederico Caldeira Knabben 4 * 5 * == BEGIN LICENSE == 6 * 7 * Licensed under the terms of any of the following licenses at your 8 * choice: 9 * 10 * - GNU General Public License Version 2 or later (the "GPL") 11 * http://www.gnu.org/licenses/gpl.html 12 * 13 * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") 14 * http://www.gnu.org/licenses/lgpl.html 15 * 16 * - Mozilla Public License Version 1.1 or later (the "MPL") 17 * http://www.mozilla.org/MPL/MPL-1.1.html 18 * 19 * == END LICENSE == 20 * 21 * FCKIECleanup Class: a generic class used as a tool to remove IE leaks. 22 */ 23 24var FCKIECleanup = function( attachWindow ) 25{ 26 // If the attachWindow already have a cleanup object, just use that one. 27 if ( attachWindow._FCKCleanupObj ) 28 this.Items = attachWindow._FCKCleanupObj.Items ; 29 else 30 { 31 this.Items = new Array() ; 32 33 attachWindow._FCKCleanupObj = this ; 34 FCKTools.AddEventListenerEx( attachWindow, 'unload', FCKIECleanup_Cleanup ) ; 35// attachWindow.attachEvent( 'onunload', FCKIECleanup_Cleanup ) ; 36 } 37} 38 39FCKIECleanup.prototype.AddItem = function( dirtyItem, cleanupFunction ) 40{ 41 this.Items.push( [ dirtyItem, cleanupFunction ] ) ; 42} 43 44function FCKIECleanup_Cleanup() 45{ 46 if ( !this._FCKCleanupObj || !window.FCKUnloadFlag ) 47 return ; 48 49 var aItems = this._FCKCleanupObj.Items ; 50 51 while ( aItems.length > 0 ) 52 { 53 54 // It is important to remove from the end to the beginning (pop()), 55 // because of the order things get created in the editor. In the code, 56 // elements in deeper position in the DOM are placed at the end of the 57 // cleanup function, so we must cleanup then first, otherwise IE could 58 // throw some crazy memory errors (IE bug). 59 var oItem = aItems.pop() ; 60 if ( oItem ) 61 oItem[1].call( oItem[0] ) ; 62 } 63 64 this._FCKCleanupObj = null ; 65 66 if ( CollectGarbage ) 67 CollectGarbage() ; 68} 69