Différencier l'onglet du navigateur fermer et actualiser (pour détecter plusieurs instances d'application)

Comment faire pour différencier l'onglet du navigateur pour fermer et actualiser la fonctionnalité.

À partir de maintenant, l'actualité de la fenêtre et l'événement de fermeture ne comportent pas d'événements différents.

Ma condition est de vérifier l'utilisateur de temps déjà connecté ou pas dans aucun des onglets, de sorte que je ne lui permettrons pas de charger mon application dans d'autres onglets.

Dans GWT (java)

 private void registerWindowCloseEvent() { Window.addCloseHandler(new CloseHandler<Window>() { @Override public void onClose(CloseEvent<Window> event) { // do something on close } }); } 

Dans JavaScript/Jquery:

  window.onbeforeunload = function(e) { // do something on close }; 

Les événements ci-dessus déclenchent à la fois les événements rafraîchissent et ferment … il y a un moyen de différencier.

Différencier l'onglet du navigateur fermer et refresh fonctionnalité est vraiment une douleur car nous n'avons pas deux événements pour savoir quel événement a été déclenché.

Mais il y a toujours des exigences 🙂

Ce que je fais, c'est de mettre un cookie en charge et de faire signaler un drapeau si on trouve ce cookie et de supprimer le cookie sur l'événement de fermeture du navigateur.

Donc, jusqu'à ce qu'il ait fermé l'onglet actif (onglet connecté), ce cookie reste là et s'il essaie d'ouvrir dans un autre onglet, la boîte de dialogue déjà active vient.

Remarque: Solution fournie avec l'aide de Cookies.

In Voici le onModule () pour GWT / même que onload/document.ready() pour java script/Jquery .

  @Override public void onModuleLoad() { if("already_in_browser". equalsIgnoreCase(Cookies.getCookie("already_in_browser"))){ showAlreadyTabActiveDialog(); return; }else{ setLoggedincookie(); } private void setLoggedincookie() { isLoggedintab = true; //this is a global variable registerWindowCloseEvent(); com.google.gwt.user.client.Cookies. setCookie("already_in_browser","already_in_browser"); } private void showAlreadyTabActiveDialog() { alert("You are already active in another tab"); registerWindowCloseEvent(); } /** This event is onbeforeunload in javascript private void registerWindowCloseEvent() { Window.addCloseHandler(new CloseHandler<Window>() { @Override public void onClose(CloseEvent<Window> event) { if(isLoggedintab ){ Cookies.removeCookie("already_in_browser"); } } }); } 

Permettez-moi de savoir si vous avez trouvé des bugs ou des trous de boucle dans ce domaine. Alors, je les regarde.

Je serais très heureux, si quelqu'un fournit une solution, sans utiliser de cookies .