2010-05-09 9 views
6

Par exemple la page actuelle est www.google.com. Mais j'ai tapé une adresse de site Web différente dans la barre d'adresse et j'ai cliqué. Ce site a entièrement code GWT. Mais j'aime revenir à la page précédente de www.google.com. J'ai donc cliqué sur le bouton de retour du navigateur. Mais comment puis-je obtenir l'événement du bouton de retour à partir du code GWT actuel. Puis-je définir un gestionnaire d'événements backbutton dans GWT de la page en cours? Celui qui m'avertit une alerte que le bouton arrière a été pressé.GWT retour bouton navigateur

Existe-t-il une solution de GWT?

Répondre

1

Vous pouvez implémenter l'interface HistoryListener: la méthode de votre classe onHistoryChanged sera appelée (avec un jeton String) à chaque clic sur les boutons Précédent et Suivant. Vous pouvez ensuite interagir avec la classe History, qui a par exemple. une méthode statique back() pour "revenir en arrière". Cependant, je ne suis pas tout à fait sûr si cela remonte à avant que GWT a commencé (mais ça vaut vraiment la peine d'essayer ;-).

+0

'HistoryListener' et en général * Les listeners sont obsolètes à partir de GWT 1.6 - vous devriez utiliser les Handlers appropriés à la place (dans ce cas c'est un' ValueChangeHandler', qui pourrait ne pas être aussi évident que 'HistoryHandler'). –

5

Il y a Window.ClosingEvent:

Fired juste avant la fenêtre du navigateur ferme ses portes ou accède à un site différent.

L'autre option est History.addValueChangeHandler, qui écoute les changements dans la pile d'historique du navigateur (voir the docs pour plus d'informations).

5

+1 à Igor et Alex. Voici un code que vous pouvez utiliser, si vous souhaitez utiliser le ClosingHandler:

Window.addWindowClosingHandler(new Window.ClosingHandler() { 

     @Override 
     public void onWindowClosing(final ClosingEvent event) { 
      event.setMessage("Don't you think my site is awesome?"); 
     } 
    }); 

Quelques informations de la Javadoc de ClosingHandler.onWindowClosing():

/* Fired just before the browser window closes or navigates to a different 
    * site. No user-interface may be displayed during shutdown. */ 
0

essayer cela, il fonctionnera

Event.addNativePreviewHandler(new Event.NativePreviewHandler() { 

     @Override 
     public void onPreviewNativeEvent(final NativePreviewEvent event) { 
      if (event.getTypeInt() == Event.ONKEYDOWN) { 
       if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_BACKSPACE) { 
        Element element = Element.as(event.getNativeEvent().getEventTarget()); 

        String tagName = element.getTagName(); 

        System.out.println(tagName); 

        // Add checks for other input controls 
        if (!tagName.equalsIgnoreCase("INPUT") 
           && !tagName.equalsIgnoreCase("TEXTAREA")) { 

         boolean result = Window.confirm("Are you sure?"); 
         if (!result) { 
          event.cancel(); 
         } 
        } 
       } 
      } 
     } 
    }); 
0

vous pouvez également utiliser ce code natif

public native void call()/*-{ 

    $wnd.onkeydown = GetChar; 

    function GetChar (event) 
    { 
     var key = event.keyCode; 

     var bb = event.target.nodeName; 

     if(key==8 && bb=="BODY")//checking keyCode of key for backspace 
       { 
        var x= window.confirm("Are you sureyou want to leave the page"); 

        if (x==true) 
          { 
           window.history.back(); 
          } 
        else if(x==false) 
          { 

           return false; 
          } 
       } 
     }     
}-*/; 
+0

ceux-ci travaillent tous sur l'espace arrière presse par l'utilisateur. est-il une méthode pour inviter l'utilisateur sur le bouton de retour du navigateur ..? –