Lorsqu’un contenu HTML navigue ou qu’il est éliminé parce qu’une fenêtre dans laquelle il figure est fermée, les écouteurs d’événement qui font référence aux objets sur la page déchargée ne sont pas automatiquement supprimés. Lorsqu’un objet distribue un événement à un gestionnaire qui a déjà été déchargé, le message d’erreur suivant s’affiche : « The application attempted to reference a JavaScript object in an HTML page that is no longer loaded » (L’application a tenté de référencer un objet JavaScript sur une page HTML qui n’est plus chargée).
Pour éviter que ce message d’erreur ne s’affiche, supprimez les écouteurs d’événement JavaScript intégrés à une page HTML avant qu’elle ne soit déchargée. En cas de navigation de page (au sein d’un objet HTMLLoader), supprimez l’écouteur d’événement lors de l’événement
unload
de l’objet
window
.
Par exemple, le code JavaScript suivant supprime un écouteur associé à un événement
uncaughtScriptException
:
window.onunload = cleanup;
window.htmlLoader.addEventListener('uncaughtScriptException', uncaughtScriptException);
function cleanup()
{
window.htmlLoader.removeEventListener('uncaughtScriptException',
uncaughtScriptExceptionHandler);
}
Pour empêcher que cette erreur ne se produise à la fermeture des fenêtres comportant un contenu HTML, appelez une fonction de nettoyage en réponse à l’événement
closing
de l’objet NativeWindow (
window.nativeWindow
). Par exemple, le code JavaScript suivant supprime un écouteur associé à un événement
uncaughtScriptException
:
window.nativeWindow.addEventListener(air.Event.CLOSING, cleanup);
function cleanup()
{
window.htmlLoader.removeEventListener('uncaughtScriptException',
uncaughtScriptExceptionHandler);
}
Pour éviter que cette erreur ne se produise, vous pouvez également supprimer un écouteur d’événement dès son exécution (sous réserve que l’événement ne doive être géré qu’une seule fois). Par exemple, le code JavaScript suivant crée une fenêtre HTML en appelant la méthode
createRootWindow()
de la classe HTMLLoader et ajoute un écouteur associé à l’événement
complete
. Lorsque le gestionnaire d’événement
complete
est appelé, il supprime son propre écouteur d’événement par le biais de la fonction
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 suppression d’écouteurs d’événement superflus permet également au nettoyeur de mémoire système de récupérer la mémoire éventuellement mobilisée par ces écouteurs.