Quando si visualizza contenuto HTML o quando tale contenuto viene eliminato perché una finestra che lo contiene viene chiusa, i listener di eventi che fanno riferimento a oggetti presenti in una pagina non caricata vengono automaticamente rimossi. Quando un oggetto invia un evento a un gestore che è già stato caricato, viene visualizzato il seguente messaggio di errore: “The application attempted to reference a JavaScript object in an HTML page that is no longer loaded.” (L'applicazione ha tentato di fare riferimento a un oggetto JavaScript in un pagina HTML che non è più caricata).
Per evitare questo errore, eliminare i listener di eventi JavaScript in una pagina HTML prima che scompaia. Nel caso di spostamento di pagine (in un oggetto HTMLLoader), eliminare il listener di eventi durante l'evento
unload
dell'oggetto
window
.
Ad esempio, il seguente codice JavaScript rimuove un listener di eventi per un oggetto
uncaughtScriptException
:
window.onunload = cleanup;
window.htmlLoader.addEventListener('uncaughtScriptException', uncaughtScriptException);
function cleanup()
{
window.htmlLoader.removeEventListener('uncaughtScriptException',
uncaughtScriptExceptionHandler);
}
Per evitare il verificarsi dell'errore quando si chiudono le finestre contenenti il contenuto HTML, chiamate una funzione di pulizia in risposta all'evento
closing
dell'oggetto NativeWindow (
window.nativeWindow
). Ad esempio, il seguente codice JavaScript rimuove un listener di eventi per un oggetto
uncaughtScriptException
:
window.nativeWindow.addEventListener(air.Event.CLOSING, cleanup);
function cleanup()
{
window.htmlLoader.removeEventListener('uncaughtScriptException',
uncaughtScriptExceptionHandler);
}
Potete inoltre evitare questo errore eliminando un listener di eventi non appena viene eseguito (se l'evento deve essere gestito una sola volta). Ad esempio, il seguente codice JavaScript crea una finestra html chiamando il metodo
createRootWindow()
della classe HTMLLoader e aggiunge un listener di eventi per l'evento
complete
. Quando viene chiamato il gestore eventi
complete
, elimina il relativo listener di eventi mediante la funzione
removeEventListener()
:
var html = runtime.flash.html.HTMLLoader.createRootWindow(true);
html.addEventListener('complete', htmlCompleteListener);
function htmlCompleteListener()
{
html.removeEventListener(complete, arguments.callee)
// handler code..
}
html.load(new runtime.flash.net.URLRequest("second.html"));
La rimozione di listener di eventi non necessari consente inoltre che il garbage collector del sistema riutilizzi qualsiasi memoria associata a tali listener.