Forums : Xul, Xbl, JS...

Aller à la discussion :  Plus récente Plus ancienne

# Un message en trop sur un onbeforeunload

Envoyé par : Christophe Charron

Date : 17/04/2007 17:41

Bonsoir, j'ai un petit souci avec onbeforeunload : Je voudrais pouvoir fermer ou pas une fenêtre en fonction de certaines règles et afficher un message de confirmation personnel. Or, en plus de mon message, j'en ai un second "Voulez-vous vraiment quitter cette page? Appuyez sur Ok pour continuer, ou Annuler pour rester sur la page actuelle" Je sais bien que 2 confirmations valent mieux qu'une, mais en l'espèce je souhaite qu'il n'y ait que ma question. Pourtant le code ne me semble pas très compliqué !!

<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<window id="test_fermeture" onload="pf_aa_init()" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<script type="text/javascript">
<![CDATA[
function pf_aa_init() {
 window.onbeforeunload=pf_aa_ferme
}
function pf_aa_ferme() {
 if (confirm("Voulez-vous quand même sortir ?")==true) {return true;} else {return false;}
}
function pf_ferme(){
 window.close();
}
function pf_ouvre() {
 var ca_c_ouvre='chrome,hidechrome,centerscreen,modal,resizable';
 var vl_e_haut = (screen.height / 2) - (300 / 2);
 var vl_e_gauche = (screen.width / 2) - (300 / 2);
 var param ='"'+ca_c_ouvre+',width=300,height=300,left='+vl_e_gauche +',top='+vl_e_haut+'"';
 window.open('2007_04_17_fermeture_01.xul', "",param);  
}
]]>
</script>
<button oncommand="pf_ouvre()" label="Ouvre une fenêtre"/>
<button oncommand="pf_ferme()" label="Fermer"/>
</window>

Voir ici la fenêtre :

# Re: Un message en trop sur un onbeforeunload

Envoyé par : papy

Date : 17/04/2007 17:53

Hello,

ce comportement est normal, ou en tout cas je n'ai jamais réussi à faire fonctionner le onbeforeunload autrement.

Normalement, tu devrais affecter une chaine (ou une valeur quelconque d'ailleurs) à onbeforeunload, et firefox se charge d'afficher ton message en demandant à l'utilisateur ce qu'il en passe => à priori aucun moyen d'annuler purement et simplement la fermeteure, l'utilisateur devra toujours valider ou annuler ca.

Exemple :

 window.onbeforeunload='Les modifications seront perdues !';

Cela donnera dans la fenêtre de confirmation :

 Voulez-vous vraiment quitter cette page?
 Les modifications seront perdues !
 Appuyez sur Ok pour continuer, ou Annuler pour rester sur la page actuelle

A noter que tu peux évidemment renvoyer cette chaine depuis une fonction, par exemple pour tester si oui ou non il y a des modifications non enregistrées. Si c'est le cas tu renvoi une chaine un peu comme dans mon exemple, si ce n'est pas le cas et que tu ne veux pas de confirmation, il ne faut rien renvoyé, PAS de return (ca produit un warning en javascript strict mais bon...)

Exemple :

 window.onbeforeunload=confirmerSortie();
 
 function confirmerSortie() {
   if(modif == true)
     return 'Les modifications seront perdues !';
 }

# Re: Un message en trop sur un onbeforeunload

Envoyé par : Christophe Charron

Date : 17/04/2007 18:45

Ok compris. Merci. Par contre je suis très embêté par ce que tu me dis là :

à priori aucun moyen d'annuler purement et simplement la fermeteure, l'utilisateur devra toujours valider ou annuler ca

y'a vraiment pas moyen d'empêcher la fermeture ??

# Re: Un message en trop sur un onbeforeunload

Envoyé par : chris

Date : 17/04/2007 20:13

Complètement HS de ma part, mais je me fais très souvent cette réflexion :

Christophe Charron a écrit:

function pf_aa_init() {
window.onbeforeunload=pf_aa_ferme
}
function pf_aa_ferme() {
if (confirm("Voulez-vous quand même sortir
?")==true) {return true;} else {return false;}
}

Pourquoi ne pas faire tout simplement :

function onbeforeunload() {
     if (confirm("Voulez-vous quand même sortir ?")==true) {return true;} else {return false;}
}

plutôt que de passer par une fonction intermédiaire, et une initialisation ?

Comme je le vois souvent utiliser, et que je trouve ça inutilement lourd, je me dis qu'il doit y avoir une raison que je ne connais pas.

# Re: Un message en trop sur un onbeforeunload

Envoyé par : Paul Rouget

Date : 18/04/2007 16:42

Je trouve ça un peu plus propre car on voit distinctement que la méthode est celle de l'objet window, meme si le contexte d'une méthode libre est celui de window (this == window).

Il n'est plus possible de poster des messages dans ce forum.


Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.

Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™ sont des marques de la fondation Mozilla.