11548 sujets

JavaScript, DOM et API Web HTML5

bonjour, bonne fete a tout le monde. voila j'espere que quelqu'un puisse m'aider a resoudre un probleme,j'essai de mettre au point un site Smiley lol je veux envoyer une requete lorsque je ferme le navigateur .bon j'ai essaye avec onbeforeunload dans le body et le script suivant

<script type="text/javascript">
     
     function quitter(){
                                $(window).load("page.php");
                              }
</script>

ca marche bien avec IE et safari mais pas avec firefox et opera Smiley decu . j'ai remplacer $(window).load("page") par une requete ajax la meme chose ca marche avec IE et safari mais pas avec firefox et opera! Smiley rolleyes je ne sais pas pourquoi? s'il vous plait aider moi je vous en prie merci ..
Modifié par nano3000 (23 Dec 2011 - 05:34)
Hello.

Là comme ça, je serais incapable de te dire pourquoi FF et Opéra ont ce comportement salutaire. Mais je me demandais ce que contient page.php? Personnellement, je ne supporte pas les pages qui te lancent un alert ou un truc du genre quand tu veux fermer un onglet ou le navigateur. C'est intrusif, et très très chiant.

Imagine toi avoir 40 onglets d'ouverts utilisant ton code, tu fermes ton navigateur -> Hop 40 requêtes Ajax. Directement : Ctrl+Alt+Suppr -> Arrêter le processus.
Modifié par Florian_R (22 Dec 2011 - 11:30)
Hello,
a écrit :
[…] ca marche bien avec IE et safari mais pas avec firefox et opera

C'est plutôt une très bonne nouvelle d'apprendre que Firefox et Opéra ne te permettent pas de faire ce genre de choses. Je ne vois pas la moindre raison pour expliquer cette idée de charger une page web lorsque l'utilisateur veut quitter son navigateur (!).
bonjour et merci pour vos reponses les amis. la raison pour la quelle je veux lancer le script au moment de fermeture du navigateur est que je souhaite informer les autres membres du site que le membre x a quitter le site ,c plus pratique que de lancer des requetes periodique
detectant si un membres est encore connecte ou non et a un avantage de ne pas saturer le serveur bon Smiley lol c comme ca que je vois les choses.. si je met des alert a la place de $(window).load("page.php") ca marche avec ff et opera Smiley confuse .voici ma page.php :

<?php
 session_start();
 $pseudo = $_SESSION['pseudo'];

   try
{
    $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    $bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '', $pdo_options);

   $bdd->query("DELETE FROM membres_connectes WHERE pseudo = '" .$pseudo. "'");
    
      
      }
catch(Exception $e)
{
    die('Erreur : '.$e->getMessage());
}
 
?>



merci pour votre aide les amis Smiley prie ..
Modifié par nano3000 (23 Dec 2011 - 05:30)
Modérateur
Bonjour,

D'un autre côté, si le membre en question ouvre plusieurs onglets ou fenêtres en même temps, et qu'il en ferme une seule, ton système indiquerait qu'il s'est déconnecté. Non?

Un système de requête périodique bien optimisé me semblerait plus fiable. À toi de voir!

La question est tout de même intéressante. Si j'ai le temps entre deux soupers de Noël, je m'y pencherai plus en détails!
Une requête périodique qui met à jour la table utilisateurs ça me semble aussi beaucoup plus solide. L'idéal est de stocker la date de la dernière activité et un boolean "is_online" et de recouper les informations des 2 champs.
bonjour et joyeux noel Smiley smile ,merci pour vos reponses les amis ,effectivement j'ai bien pense au systeme periodique qui met a jour la base de donnees ,mais le probleme ne concerne qu'une seule page de site c.a.d un salon de discution,donc c pour que les autres membres sachent si un membre a quitter le salon ou nn.la solution a la quelle j'ai opte est vraiment tres leger ,je penserai a interdire aux membres d'ouvrir 2 sessions ou plus sur la meme machine Smiley rolleyes .pour ff la solution est la:
https://developer.mozilla.org/fr/DOM/window.onbeforeunload
le seul inconvenient c qu'il fait apparaitre la petite fenetre ,je cherche encore pour opera bah s'il supporte l'evenement biensur Smiley lol merci..
Modifié par nano3000 (24 Dec 2011 - 08:23)