當 HTML 內容在瀏覽時,或者當因為包含 HTML 內容的視窗關閉進而捨棄 HTML 內容時,並不會自動移除參考已取消載入網頁之物件的事件偵聽程式。在物件將事件傳送至已取消載入的處理常式時,您會看到下列錯誤訊息:「應用程式嘗試參考已不存在之 HTML 網頁中的 JavaScript 物件」。
若要避免這個錯誤,請在 HTML 網頁關閉之前,先移除網頁中的 JavaScript 事件偵聽程式。如果是在網頁瀏覽的情況下 (在 HTMLLoader 物件中),請在
window
物件的
unload
事件期間移除事件偵聽程式。
例如,下列 JavaScript 程式碼會移除
uncaughtScriptException
事件的事件偵聽程式:
window.onunload = cleanup;
window.htmlLoader.addEventListener('uncaughtScriptException', uncaughtScriptException);
function cleanup()
{
window.htmlLoader.removeEventListener('uncaughtScriptException',
uncaughtScriptExceptionHandler);
}
若要避免在關閉包含 HTML 內容的視窗時發生錯誤,請呼叫 cleanup 函數以回應 NativeWindow 物件 (
window.nativeWindow
) 的
closing
事件。例如,下列 JavaScript 程式碼會移除
uncaughtScriptException
事件的事件偵聽程式:
window.nativeWindow.addEventListener(air.Event.CLOSING, cleanup);
function cleanup()
{
window.htmlLoader.removeEventListener('uncaughtScriptException',
uncaughtScriptExceptionHandler);
}
亦可在事件偵聽程式一執行時就予以移除 (若此事件只需處理一次),以避免此錯誤發生。例如,下列 JavaScript 程式碼會呼叫 HTMLLoader 類別的
createRootWindow()
方法以建立 HTML 視窗,並加入
complete
事件的事件偵聽程式。呼叫
complete
事件處理常式時,它會使用
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"));
移除不再需要的事件偵聽程式時,系統垃圾回收器便會針對與這些偵聽程式相關聯的記憶體進行記憶體回收。