Page 1 sur 1

onBeforeUnload, encore lui... fonction qui se lance seule

Posté : 30 mars 2007, 11:34
par bravegars
Salut,

Oui c'est encore moi, avec un nouveau problème causé par onbeforeunload. :lol:

J'ai deux fonctions XMLHttpRequest, l'une d'elle traite les messages qui s'affichent dans mon chat, et l'autre supprime les fichiers lorsque le dernier utilisateur quitte le chat.

Tout marchait très bien jusqu'a ce que j'ajoute les unlink qui supprime les fichiers. Alors voilà quel est le probleme.

Lorsqu'un utilisateur envoit un message, celui-ci ne s'affiche pas, et les fichiers de sauvegardes du chat sont détruits.

Bizarre, car la fonction qui détruit les fichiers n'est appelée que lorsque l'utilisateur change de page ou ferme le navigateur. Cette fonction ne devrait donc pas se lancer toute seule, et c'est pourtant ce qu'il se passe.

Dernière précision, aucun problème avec FF, c'est IE qui fout encore sa m...

Code : Tout sélectionner

<html>..... <body onbeforeunload="javascript:maFonction()"> <form action="javascript:afficherMessages()" method="post" name="mesinfos"> <input id="mesinfos" style="width: 200px" name="mesinfos"></form> ........</html>

Code : Tout sélectionner

<script type="text/javascript"> $winev = window.Event; if(winev){ window.onbeforeunload = function(winev){ return maFonction(winev); } else{ window.onbeforeunload = function(){ return maFonction(winev); }} function maFoncion(){ .................... // appele le script qui détruit les fichiers du chat } </script> <script type="text/javascript"> function afficherMessages(){ .................... // appele le script qui affiche les messages } </script>
Je pense qu'il y a peut-être un conflit entre le bouton mesinfos du formulaire, et les script javascript. Si vous aviez une idée ? merci :(

Posté : 31 mars 2007, 10:52
par bravegars
Salut,

J'ai toujours pas de solution, j'ai essayé plein de trucs et astuces rien ne marche.

Je voulais demander s'il est possible d'externaliser les requêtes ajax ? Parce que ça pourrait résoudre mon probleme mais apparemment ça ne fonctionne pas.

Si je place la requête XMLHttpRequest qui doit appeler le fichier qui va supprimer les fichiers de mon chat, dans un fichier "deco.js", le code ne s'exécute pas. Dites moi si mon code est bon, merci.

dans la page de mon chat :

Code : Tout sélectionner

<script src="deco.js" type="text/javascript"></script> <body onbeforeunload="javascript:maFonction()">
dans mon fichier deco.js :

Code : Tout sélectionner

var xhr = null; function maFonction(){ if(window.ActiveXObject){ xhr = new ActiveXObject("Microsoft.XMLHTTP"); } else if(window.XMLHttpRequest){ xhr = new XMLHttpRequest(); } var ......... // ici les variables a passer xhr.open('POST', 'deconnexion_chat.php', true); xhr.onreadystatechange = function(){ if(xhr.readyState == 4 && xhr.status == 200){ var okay = "résultat ok"; } else if(xhr.readyState != 4 || xhr.status != 200){ xhr == null; }} xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); xhr.send(les_variables...ICI); }
enfin dans le fichier deconnexion_chat.php :

Code : Tout sélectionner

<?php ......................... unlink("$fichier_connexions"); unlink("$fichier_messages"); ?>
Tous les fichiers sont dans le même répertoire ça devrait donc fonctionner. Et pourtant le fichier deconnexion_chat.php ne s'exécute pas. Merci pour vôtre aide parce que là je sèche.

Posté : 02 avr. 2007, 10:08
par bravegars
Salut,

Bon, j'ai un peu progressé mais j'ai toujours ce problème, qui est du à un bug de onbeforeunload dans IE.

Je vous disais précédemment que lorsque je tapais un message dans la fenêtre de chat, cela lançait la fonction maFonction() qui doit effacer les fichiers du chat. J'ai modifié un peu le code, j'ai rajouté les lignes window.onbeforeunload = confirmExit; et function confirmExit()

Code : Tout sélectionner

<script type="text/javascript"> window.onbeforeunload = confirmExit; function confirmExit(){ $winev = window.Event; if(winev){ window.onbeforeunload = function(winev){ return maFonction(winev); } else{ window.onbeforeunload = function(){ return maFonction(winev); }} function maFoncion(){ .................... // appele le script qui détruit les fichiers du chat } } </script> <script type="text/javascript"> function afficherMessages(){ .................... // appele le script qui affiche les messages } </script>
Avec ce code lorsque je tape un message, celui ci s'affiche, et si je clique ensuite sur la croix du navigateur les fichiers sont effacés. C'est exactement ce que je souhaite. Le problème c'est que si je tape, non pas un mais deux messages, les fichiers s'effacent à nouveau. Je tourne en rond, problème insoluble apparemment. Personne n'aurait une idée ? N'hésitez pas à exposer une idée, même si vous n'avez pas la réponse, je m'efforcerais de la trouver avec vôtre aide. Merci.