2010-01-28 4 views
1

J'utilise un plugin de type growl pour jQuery envoyer des messages en direct aux utilisateurs pour partager l'activité sur le site. À l'heure actuelle, je mets à jour l'utilisateur uniquement avec les notifications qui se sont produites depuis le dernier accès de l'utilisateur sur le site. Toutefois, lorsque plusieurs onglets sont ouverts sur le site, seuls certains des onglets obtiennent les notifications en raison des longues interrogations, car un onglet peut vider la notification avant que les autres onglets ne les obtiennent. Quelle est la meilleure façon de mettre en œuvre un système de notification où chaque onglet affichera les messages en même temps?Quelle est la meilleure façon de suivre les notifications en direct à envoyer à un utilisateur?

Quelle est la meilleure façon de mettre en œuvre un système de notification où chaque onglet affichera les messages en même temps? Peut-être aussi pour maintenir un niveau de persistance de sorte que, disons, les notifications resteront sur la page pendant 15 secondes même si un utilisateur navigue vers une page différente?

Merci.

+0

duplication possible de [Comet et jQuery] (http://stackoverflow.com/questions/136012/comet-and-jquery) –

Répondre

0

Vous pouvez utiliser l'objet window.localStorage en tant que tampon pour les notifications partagées entre les onglets/fenêtres. Pour assurer la compatibilité entre navigateurs, vous pouvez également utiliser la bibliothèque store.js au lieu de traiter directement avec localStorage.

Vous pouvez donc envoyer vos notifications au client via socket Web ou de toute autre manière et le gestionnaire les poussera vers ce tampon. Dites ce serait un tableau comme

[ 
    notification1, 
    notification2 
    // etc. 
] 

Chaque fenêtre (onglet) doit être enregistré dans localStorage lorsque l'utilisateur ouvre, comme:

{ 
    wnd_<timestamp_of_window1_onload_event>: 1 
    wnd_<timestamp_of_window2_onload_event>: 1 
} 

Dans chaque fenêtre (onglet), vous pouvez utiliser une fenêtre Fonction .setInterval pour vérifier le tampon toutes les N millisecondes pour les nouvelles notifications. La fonction appelée par setInterval lit les nouvelles notifications du tampon et les affiche. Dans le gestionnaire window.onbeforeunload, vous annulez l'enregistrement de la fenêtre actuelle de la collection Windows dans localStorage. Et si la collection de fenêtres est vide après la désinscription de la fenêtre en cours, vous pouvez vider le tampon des notifications. Bien sûr, c'est une solution brève, peut-être que vous devrez penser à la suppression des notifications obsolètes (traitées par toutes les fenêtres) à partir du tampon avant la fermeture de toutes les fenêtres.

Questions connexes