11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour à tous !

Je possède un chat javascript et PHP qui est ouvert dans une fenêtre popup.

Le problème vient du fait que lorsque les personnes ferment leur fenêtre, le chat met plusieurs dizaines de seconde à détecter leur départ.

Je cherchais donc une option qui faisait déclencher un code javascript lorsque la personne ferme la fenetre de la procédure normalle (car la mise en place d'un bouton déconnexion ne sert à rien, un alt+F4 ou un clic sur la croix est tellement plus naturel...)

Merci d'avance pour votre aide Smiley smile
Modifié par Sylvain (03 Nov 2005 - 12:34)
Bonjour,
Tu peux essayer avec unload:
<body onunload="alert('fermeture fenêtre')">


Mais, je suppose que tu voudrait faire un truc comme ça :

<body onunload="window.open('deconnection.php')">


Problème : Pas utilisable car la fenêtre de deconnection sera la plupart du temps bloquée par les anti popup ...

Solution possible ?: plutot que d'ouvrir une popup effectuer directement la requette via AJAX

Problème : je ne sais pas si ça marche (problème possible à cause des temps de latences de l'AJAX ...)

En tous cas, dis nous si ça marche car les problèmes de deconnection sont toujours galères et avant de trouver cette idée (qui n'est pas testée), je n'avais jamais trouvé de solutions satisfaisantes ...

PS: si tu n'a jamais fais d'AJAX, voiçi qq liens en vrac :
http://developpeur.journaldunet.com/tutoriel/dht/050406-javascript-ajax-xmlhttprequest-1.shtml
http://qwix.media-box.net/index.php/2005/01/21/45-XmlhttprequestEtPhp
http://developer.apple.com/internet/webcontent/xmlhttpreq.html
http://www.toutjavascript.com/savoir/xmlhttprequest.php3
http://developpeur.journaldunet.com/tutoriel/dht/050513-javascript-ajax-xmlhttprequest-recherche1.shtml
La fenêtre de deconnection est bloquée dans ton second code, en effet, mais je suis heureux de voir que tu as bien compris ce que je voulais faire Smiley smile

Ajax, ajax, ce n'est pas une lessive ca ? Smiley biggrin
J'ai déjà utilisé pour de petits trucs futiles, mais en effet, j'ai un peu peur que ca prenne trop de temps, la fermeture d'une fenetre est quasi-instantannée.

En fait, il faudrait voir si les navigateurs appellent la page avant de fermer la fenetre, ou non.
Il suffirait ensuite de faire une page PHP indiquant la déconnection au serveur.
Je vais lire toutes les documentations que tu m'as donné. Smiley cligne

Merci.
a écrit :
Ajax, ajax, ce n'est pas une lessive ca ?


Non c'est Asychronous Javascript Xml, racourcit en AJAX juste pour se la péter !!! Smiley cligne , en gros c'est juste du javascript dynamique via l'objet Xmlhttprequest

a écrit :
j'ai un peu peur que ca prenne trop de temps, la fermeture d'une fenetre est quasi-instantannée.

Je ne sais pas : je pense qu'il exécute tout le code du unload donc ça peux peut être marcher ...

a écrit :
Je vais lire toutes les documentations que tu m'as donné.

J'ai mis ça un peu en vrac, pour ce cas, juste un article avec les bases de l'utilisations de l'objet Xmlhttprequest suffis ...

Bon courage
Pourquoi prend tu le problème dans ce sens. Il suffit d'envoyer régulièrement via XHR un ping pour dire je suis connecté. Une personne ne l'est plus lorsque le dernier ping date de plus de n secondes.

++
C'est ce que je fais d'habitude mais pour moi le problème de cette méthode est :
- soit on fais un "ping" très régulier (genre toutes les 30s) et ça fais pleins de requêttes "inutiles"
- soit on fais un ping toutes les 5min : moins de requêttes mais si le client veux se reconnecter sans s'être déconnecté, il doit attendre 5min ...

C'est pour ça que la méthode unload/javax marche, on pourrait cumuler les 2 méthodes : un ping toutes les 5min + détection de déconnection

PS: c'est quoi XHR ??? Smiley confus
Modifié par fxoxo (03 Nov 2005 - 12:18)
Dans la mesure où déjà tu fais un chat en HTML tu fais déjà un truc "inutile" ^^ Nan JE RIGOLE!

Pendant que tu fais le ping tu peux très bien demander la liste des nouveaux messages Smiley smile

ps: XHR = XMLHttpRequest Smiley smile
En effet, comme la liste des nouveaux messages est très souvent chargée (toutes les 5 secondes par exemple), si il n'a rien demandé depuis 10 secondes (11 secondes pour les délais), ca quitte.

La solution est plus simple, je pense que c'est celle que j'utiliserais, et que je cumulerais sans doute avec un ajax comme dit plus haut.

Comme ca, si tout se passe bien, ca déconnecte instantannément.
Si par malheur l'utilisateur ferme la fenetre de manière inadaptée... ca quittera au bout de X secondes Smiley smile

Pour Han > c'est un chat fonctionnant sur IRC au départ, et avec PHP et XHR, ca actualise sans recharger la page et en consommant assez peu de ressource serveur. Ce n'est pas un chat html Smiley biggrin
Modifié par Sylvain (03 Nov 2005 - 12:34)
Sylvain a écrit :

Pour Han > c'est un chat fonctionnant sur IRC au départ, et avec PHP et XHR, ca actualise sans recharger la page et en consommant assez peu de ressource serveur. Ce n'est pas un chat html Smiley biggrin


Désolé pour ma remarque précédente Smiley smile