Disable back button in GWT

前端 未结 5 558
旧时难觅i
旧时难觅i 2021-01-15 14:28

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

相关标签:
5条回答
  • 2021-01-15 14:41
    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 :)

    0 讨论(0)
  • 2021-01-15 14:42

    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.com/group/google-web-toolkit/browse_thread/thread/8b2a7ddad5a47af8/154ec7934eb6be42?lnk=gst&q=disable+back+button#154ec7934eb6be42

    However, I would recommend 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.

    0 讨论(0)
  • 2021-01-15 14:42

    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");
      
    0 讨论(0)
  • 2021-01-15 14:52

    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
                        }
                    }
                }
            });
        }
    
    0 讨论(0)
  • 2021-01-15 15:03

    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');

    0 讨论(0)
提交回复
热议问题