onUnload -> étrange problème sur Firefox

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : onUnload -> étrange problème sur Firefox

Re: onUnload -> étrange problème sur Firefox

par nambawan » 18 juil. 2006, 09:54

C'est bizarre car moi c'est plus souvent IE qui me pose pb dans ce genre de situation. Quand tu dis que FF n'interprête pas l'évènement onunload, tu le sais comment?
Je lance simplement une session chat sur deux postes différents ( en l'occurence, mon poste principal et mon portable ) et je teste les connections et les déconnections ( les connections, évidemment pas de problèmes. La déconnection automatique - après un laps de temps d'inactivité -, pas de souçis non plus ).
Ensuite je vérifie simplement si le pseudo disparait de la liste des connectés sur un poste à la fermeture de la fenêtre chat sur l'autre poste... :?

MAIS, caramba!, je viens de constater à la minute que le problème est aussi présent avec IE. :x
Je dois admettre que ça me dépasse...
Un pti bout de code pour tester?
Voilà. (soyez un peu indulgents, je ne fais du code que depuis un peu plus de deux mois :? (mais c'est devenu une drogue))
Petit détail: il m'avait semblé - mais je peux me tromper - que les requêtes envoyées en vrac généraient beaucoup d'erreurs, je les ai donc placées dans la boucle principale afin qu'elles soient soumises au serveur dans un flux rationnel.

Code : Tout sélectionner

function LogIn(){ //===============================================LOGIN action = "log"; } function go(){ //==================================================MESSAGE action = "publication"; message=document.getElementById('id_mess').value; document.getElementById('id_mess').value="Envoi du message"; document.getElementById('id_mess').style.backgroundColor="yellow"; } function LogOut(){ //==============================================DELOG action = "unlog"; } function timer(){ //================================================START TIMER action="first"; setInterval('boucle()','1000'); } function quit(){ var unlogPseudo = document.getElementById('client').innerHTML; if (unlogPseudo!=""){ if (unlogPseudo!="déconnecté"){ alert ('Vous allez être déconnectés'); } loadXMLdoc('chatdb2.php?action=quit&pseudo='+unlogPseudo,'client'); }else{ loadXMLdoc('chatdb2.php?action=quit&pseudo='+unlogPseudo,'client'); } } function relog(relogin){ //==========================================RECONNECTION EN CAS DE REFRESH loadXMLdoc('chatdb2.php?action=LogIn&pseudo='+relogin,'client'); } function boucle(){ switch(action){ case 'first': action="lecture"; loadXMLdoc('chatdb2.php?action=ListeConnect','ListeConnect') ; loadXMLdoc('chatdb2.php?action=first','zoneAff') ; loadXMLdoc('chatdb2.php?action=disconnect','client') ; break; case 'lecture': loadXMLdoc('chatdb2.php?action=ListeConnect','ListeConnect') ; loadXMLdoc('chatdb2.php?action=boucle','zoneAff') ; loadXMLdoc('chatdb2.php?action=disconnect','client') ; break; case 'log': action="lecture"; var logs = document.getElementById('ListeConnect').innerHTML.toUpperCase(); if (document.getElementById('client').innerHTML!="déconnecté" || document.getElementById('client').innerHTML!=""){ var nom = prompt ("Entrez votre pseudo",""); if (nom=="" || nom == null){ //alert ("Vide!"); return false; } else if(logs.indexOf(nom.toUpperCase())>=0){ alert("Ce pseudo est déjà utilisé!"); return false; } else{ loadXMLdoc('chatdb2.php?action=LogIn&pseudo='+nom,'client'); } }else if (document.getElementById('client').innerHTML!=""){ alert ("Vous êtes déjà connectés!"); } break; case'publication': action="lecture"; if (document.getElementById('client').innerHTML!="déconnecté" || document.getElementById('client').innerHTML!=""){ var pseudo = document.getElementById('client').innerHTML; } if (document.getElementById('client').innerHTML=="" || document.getElementById('client').innerHTML=="déconnecté"){ alert ('Non connecté!!'); document.getElementById('id_mess').style.backgroundColor="white"; return; } if (document.getElementById('id_mess').value==""){ alert ('Message vide!!'); document.getElementById('id_mess').style.backgroundColor="white"; return; } else if(message!=""){ loadXMLdoc('chatdb2.php?mess='+message+'&action=normal&pseudo='+pseudo,'zoneAff') ; document.getElementById('id_mess').value=""; document.getElementById('id_mess').style.backgroundColor="white"; message=""; } break; case'unlog': action="lecture"; var unlogPseudo = document.getElementById('client').innerHTML; loadXMLdoc('chatdb2.php?action=LogOut&pseudo='+unlogPseudo,'client'); loadXMLdoc('chatdb2.php?action=ListeConnect','ListeConnect') ; document.getElementById('client').innerHTML="déconnecté"; break; } }

Code : Tout sélectionner

<body onUnload="quit();">
case "quit":
			$nom= encode($_GET['pseudo']);
			$requete = "delete * FROM connection WHERE pseudo='".$nom."'";  
			$conn->execute($requete);    
			$conn->Close();
			unset ($_SESSION['pseudo']);
		exit;
En fait, pour simplifier et dans le but de n'avoir qu'un strict minimum de fichiers (donc: une page principale avec tout dedans et une petite base Access(!) avec les messages et les logins ) j'ai mis tout le code php, javascript, html dans la même page (chatdb2.php).
Peut-être que le malaise vient de là???

Re: onUnload -> étrange problème sur Firefox

par starkeus » 18 juil. 2006, 09:08

Cela fonctionne parfaitement sur IE, par contre Firefox n'éxecute le onUnload à la fermeture de la fenêtre que très aléatoirement, et l'unique moyen que j'ai trouvé pour que le code s'exécute correctement jusqu'à la fin est de lancer un alert("Déconnection"); à la fermeture.
C'est bizarre car moi c'est plus souvent IE qui me pose pb dans ce genre de situation. Quand tu dis que FF n'interprête pas l'évènement onunload, tu le sais comment? tes fonctions de déconnexion côté serveur ne s'éxécutent pas c'est ça? tu as regardé dans la console Javascript de FF?
Un pti bout de code pour tester?

par nambawan » 17 juil. 2006, 19:56

sans aucune garantie : essaie de remplacer onUnload par onBeforeUnload
hélas... :(

par Shrell » 17 juil. 2006, 18:40

sans aucune garantie : essaie de remplacer onUnload par onBeforeUnload

onUnload -> étrange problème sur Firefox

par nambawan » 17 juil. 2006, 17:33

Bonjour!

Novice en programmation, j'essaie laborieusement de créer un chat utilisant HTTPREQUEST. J'y suis quasiment parvenu, mais il reste un souçi: la déconnection de l'utilisateur.
Comme je désire impérativement que les personnes connectées voient immédiatement les déconnections les uns des autres, j'ai utilisé un onUnload afin que quand une personne ferme la fenêtre du chat ( car il me semble illusoire de demander à tous les internautes de poliment cliquer "déconnecter" :roll: ), les variables de sessions soient détruites et le pseudo effacé de la base.

Cela fonctionne parfaitement sur IE, par contre Firefox n'éxecute le onUnload à la fermeture de la fenêtre que très aléatoirement, et l'unique moyen que j'ai trouvé pour que le code s'exécute correctement jusqu'à la fin est de lancer un alert("Déconnection"); à la fermeture.

Et je trouve ça un peu pas terrible...

Est-ce un problème connu?
Quelqu'un a-t-il expérimenté ce problème?
Si oui, a-t-il trouvé une solution?

Merci d'avance! :)