2009-06-12 8 views
0

Tout en développant une extension firefox, je crée une fenêtre de l'assistant de overlay.js en utilisant:Fermeture Assistant XUL de overlay.js

this.wizard = window.openDialog("chrome://firenow/content/wizard.xul", "","chrome, dialog, modal, resizable=no", params); 
this.wizard.focus(); 

Comment puis-je fermer l'assistant de overlay.js? Je devrais appeler sa fonction cancel() mais je ne peux pas le faire fonctionner!

Répondre

0

Vous pouvez écrire votre propre fonction de cacher qui fait quelque chose dans la mesure de cela.

wizard.style.display = 'none'; 

Si vous êtes paranoïaque, vous pouvez également supprimer tous les nœuds enfants de wizard en plus de le cacher.

+0

C'est faux. Vous ne fermez pas la fenêtre de l'assistant, qui conserve les ressources associées en mémoire. La réponse de sdwilsh est meilleure. – Nickolay

+0

@Nickolay: Bonjour. Merci pour votre critique. =) Je suis conscient que ma réponse pourrait être fausse. J'ai seulement écrit dans ma réponse après avoir vu la réponse de sdwilsh et les commentaires connexes. J'essayais juste de suggérer des choses différentes. Maintenant vous pourriez être plus qualifié que moi pour répondre à cette question, mais je pense que supprimer tous les nœuds enfants et fermer la fenêtre est similaire en ce qui concerne la mémoire. Si c'était différent, quelle est la différence? – wai

+0

@Nickolay: Désolé pour le barrage des commentaires. Commentant à nouveau parce que cela ne va pas au-dessus. De l'apparence de son code, l'assistant est très probablement un objet singleton. Combien de mémoire peut-il fuir? Un effet secondaire intéressant de l'utilisation de cette méthode est que nous conserverons le noeud 'wizard', ce qui signifie que nous pourrons faire plus de choses plus tard sans avoir à ouvrir la fenêtre. Cela nous sauverait également des maux de tête tels que 'indéfini' ou 'nul' car il se fermait et nous empêchait de faire un appel window.open chaque fois que nous devions changer les choses. Encore une fois, merci pour votre temps! =) Très apprécié! – wai

1

this.wizard serait un objet nsIDOMWindow, mais met également en œuvre les méthodes sur nsIDOMWindowInternal, vous devriez donc être en mesure d'appeler juste this.wizzard.close()

+0

désolé, cela ne fonctionne pas – Giancarlo

+1

Je devrais voir le XUL de wizard.xul puis essayer de comprendre ce qui se passe. – sdwilsh

1

Vous avez ouvert l'assistant de façon modale afin que votre code s'arrête jusqu'à ce que l'utilisateur annule l'assistant. En particulier, vous ne pouvez pas trouver l'objet fenêtre de l'assistant tant qu'il n'est pas fermé, à quel point la mise au point n'aura aucun effet! Si vous avez vraiment besoin d'ouvrir l'assistant de manière modale, vous pouvez toujours le fermer, mais vous devrez ajouter le code qui ferme l'assistant dans l'assistant lui-même.