HTML içeriği gezindiğinde veya içeriğe sahip pencere kapatıldığı için HTML içeriği atıldığında, boşaltılan sayfadaki nesnelere başvuran olay dinleyicileri otomatik olarak kaldırılmaz. Bir nesne, işleyiciye önceden boşaltılmış bir olay gönderdiğinde, şu hata mesajını görürsünüz: “Uygulama, artık yüklü olmayan bir HTML sayfasındaki JavaScript nesnesine başvurma girişiminde bulundu.” (The application attempted to reference a JavaScript object in an HTML page that is no longer loaded.)
Bu hatayı önlemek için, atılmadan önce HTML sayfasındaki JavaScript olay dinleyicilerini kaldırın. Sayfa gezinmesi durumunda (HTMLLoader nesnesinin içinde),
window
nesnesinin
unload
olayı sırasında olay dinleyicisini kaldırın.
Örneğin aşağıdaki JavaScript kodu,
uncaughtScriptException
olayı için bir olay dinleyicisini kaldırır:
window.onunload = cleanup;
window.htmlLoader.addEventListener('uncaughtScriptException', uncaughtScriptException);
function cleanup()
{
window.htmlLoader.removeEventListener('uncaughtScriptException',
uncaughtScriptExceptionHandler);
}
HTML içeriğine sahip pencereler kapatılırken hata oluşmasını önlemek için, NativeWindow nesnesinin (
window.nativeWindow
)
closing
olayına yanıt olarak bir temizleme işlevi çağırın. Örneğin aşağıdaki JavaScript kodu,
uncaughtScriptException
olayı için bir olay dinleyicisini kaldırır:
window.nativeWindow.addEventListener(air.Event.CLOSING, cleanup);
function cleanup()
{
window.htmlLoader.removeEventListener('uncaughtScriptException',
uncaughtScriptExceptionHandler);
}
Ayrıca, bir olay dinleyicisini çalıştığı anda kaldırarak bu hatanın oluşmasını önleyebilirsiniz (olayın yalnızca bir defa işlenmesi gerekiyorsa). Örneğin aşağıdaki JavaScript kodu, HTMLLoader nesnesinin
createRootWindow()
yöntemini çağırarak bir html penceresi oluşturur ve
complete
olayı için bir olay dinleyicisi ekler.
complete
olay işleyicisi çağrıldığında,
removeEventListener()
işlevini kullanarak kendi olay dinleyicisini kaldırır:
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"));
Gerekmeyen olay dinleyicilerini kaldırmak da sistem çöp toplayıcısının bu dinleyicilerle ilişkilendirilen tüm belleği geri istemesini sağlar.