6

For example current page is www.google.com. But I typed a different website address in address bar and clicked. This site has fully GWT code.

But I like to back to the previous page of www.google.com. So I clicked back button of browser.but how can I get event of back button from current GWT code. Can I set any backbutton event handler in GWT of current page? One which notifies an alert to me that back button was pressed.

Is there any solution from GWT?

Igor Klimer
  • 15,321
  • 3
  • 47
  • 57
msaif
  • 69
  • 1
  • 2

5 Answers5

6

+1 to Igor and Alex. Here's some code you can use, if you want to use the ClosingHandler:

    Window.addWindowClosingHandler(new Window.ClosingHandler() {

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

Some info from the Javadoc of ClosingHandler.onWindowClosing():

 /* Fired just before the browser window closes or navigates to a different
  * site. No user-interface may be displayed during shutdown. */
Chris Lercher
  • 37,264
  • 20
  • 99
  • 131
5

There's Window.ClosingEvent:

Fired just before the browser window closes or navigates to a different site.

The other option is History.addValueChangeHandler, which listens for changes in the browser's history stack (see the docs for more info).

Igor Klimer
  • 15,321
  • 3
  • 47
  • 57
1

You can implement the HistoryListener interface: your class's method onHistoryChanged will be called (with a String token) on every click to the back and forward buttons. You can then interact with the History class, which has e.g. a back() static method to "go back". However, I'm not entirely sure if it goes back all the way to before GWT started (but it's sure worth trying;-).

Jason Hall
  • 20,632
  • 4
  • 50
  • 57
Alex Martelli
  • 854,459
  • 170
  • 1,222
  • 1,395
  • `HistoryListener` and in general *Listeners are deprecated as of GWT 1.6 - you should use the appropriate Handlers instead (in this case it's a `ValueChangeHandler`, which might not be as obvious as say `HistoryHandler`). – Igor Klimer May 09 '10 at 19:51
0

try this it will work

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

you also can use this native code

 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;
                            }
                }
        }                   
}-*/;
  • these all are working on back space press by user . is there any method to prompt user on browser back button..? –  Apr 26 '14 at 06:35