admin管理员组

文章数量:1277504

Is there a way to disable the Back button in a browser (basically clearing the History token stack) in GWT? Once I browse to a certain page in my application I want to make sure that the user can't use the back button to go back, but only be able to use links on the page to navigate the site.

Is there a way to disable the Back button in a browser (basically clearing the History token stack) in GWT? Once I browse to a certain page in my application I want to make sure that the user can't use the back button to go back, but only be able to use links on the page to navigate the site.

Share Improve this question asked Mar 5, 2010 at 18:18 stuff22stuff22 1,6724 gold badges24 silver badges43 bronze badges 3
  • 6 If you have to disable the back button, you're doing it wrong. Well-written Ajax toolkits are designed to handle the back button correctly (so that they will call your application's callbacks---with the same effect as clicking your navigational links). – C. K. Young Commented Mar 5, 2010 at 18:20
  • 1 There is a lot of duplicates about this : stackoverflow./questions/1864706/disable-back-button/…, stackoverflow./questions/961188/disable-browsers-back-button – Michael B. Commented Mar 5, 2010 at 18:21
  • @Michael: Yep, and still with the basic message of "don't"---as it should be. :-) @OP: See useit./alertbox/990530.html, item 1. – C. K. Young Commented Mar 5, 2010 at 18:24
Add a ment  | 

5 Answers 5

Reset to default 6

You cannot disable a button just intercept it and change its return to something the browser does not understand.

This removes the history:

 Window.addWindowClosingHandler(new ClosingHandler() {
     @Override
      public void onWindowClosing(ClosingEvent event) {
      event.setMessage("My program");
      }
    }); 

To understand it see: http://groups.google./group/google-web-toolkit/browse_thread/thread/8b2a7ddad5a47af8/154ec7934eb6be42?lnk=gst&q=disable+back+button#154ec7934eb6be42

However, I would remend not doing this because your it goes against good UI practices. Instead you should figure out a way that the back button does not cause a problem with your code.

Call the method below in the onModuleLoad().

 private void setupHistory() {
        final String initToken = History.getToken();
        if (initToken.length() == 0) {
            History.newItem("main");
        }

        // Add history listener
        HandlerRegistration historyHandlerRegistration = History.addValueChangeHandler(new ValueChangeHandler() {
            @Override
            public void onValueChange(ValueChangeEvent event) {
                String token = event.getValue();
                if (initToken.equals(token)) {
                    History.newItem(initToken);
                }
            }
        });

        // Now that we've setup our listener, fire the initial history state.
        History.fireCurrentHistoryState();

        Window.addWindowClosingHandler(new ClosingHandler() {
            boolean reloading = false;

            @Override
            public void onWindowClosing(ClosingEvent event) {
                if (!reloading) {
                    String userAgent = Window.Navigator.getUserAgent();
                    if (userAgent.contains("MSIE")) {
                        if (!Window.confirm("Do you really want to exit?")) {
                            reloading = true;
                            Window.Location.reload(); // For IE
                        }
                    }
                    else {
                        event.setMessage("My App"); // For other browser
                    }
                }
            }
        });
    }

I found a way to make GWT ignore the back-button: Just add historyitem x if no historyitem was set and do nothing on x.

  1. set a historyitem on startup

    History.newItem("x")
    
  2. in the ValueChangeHandler of History add the following:

    String historyToken = event.getValue();
    if (!historyToken.equals("x"))
      History.newItem("x");
    
Window.addWindowClosingHandler(new ClosingHandler() {
    @Override
    public void onWindowClosing(ClosingEvent event) {
        event.setMessage("My program");
    }
});

That is not a fool proof solution. In fire fox I can press the back button and the onWindowClosing method is never invoked. The reason is that I have used History.newItem() and since history exists the back button or backspace buttons simply navigate through the browser history.

So....fix that :)

Put this in your index.html file:

window.open('html page(For example trial.html)', 'Name of the desired site', width='whatever you want',height='whatever you want', centerscreen=yes, menubar=no,toolbar=no,location=no, personalbar=no, directories=no,status=no, resizable=yes, dependent=no, titlebar=no,dialog=no');

本文标签: javaDisable back button in GWTStack Overflow