禁用GWT中的后退按钮

时间:2010-03-05 18:18:58

标签: java javascript gwt

有没有办法在GWT中禁用浏览器中的“后退”按钮(基本上清除历史记录堆栈)?一旦我浏览到我的应用程序中的某个页面,我想确保用户不能使用后退按钮返回,但只能使用页面上的链接来浏览网站。

5 个答案:

答案 0 :(得分:6)

您无法禁用按钮只是拦截它并将其返回更改为浏览器无法理解的内容。

删除历史记录:

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

要了解它,请参阅:http://groups.google.com/group/google-web-toolkit/browse_thread/thread/8b2a7ddad5a47af8/154ec7934eb6be42?lnk=gst&q=disable+back+button#154ec7934eb6be42

但是,我建议不要这样做,因为它违背了良好的UI实践。相反,您应该找出一种方法,即后退按钮不会导致代码出现问题。

答案 1 :(得分:2)

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

答案 2 :(得分:1)

我找到了一种方法让GWT忽略后退按钮:如果没有设置historyitem,只需添加historyitem x,并且不对x执行任何操作。

  1. 在启动时设置历史专业

    History.newItem("x")
    
  2. 在历史的ValueChangeHandler中
  3. 添加以下内容:

    String historyToken = event.getValue();
    if (!historyToken.equals("x"))
      History.newItem("x");
    

答案 3 :(得分:0)

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

这不是一个万无一失的解决方案。在火狐中,我可以按后退按钮,永远不会调用onWindowClosing方法。原因是我使用了History.newItem()并且由于历史存在,后退按钮或退格按钮只是浏览浏览器历史记录。

所以....修复:)

答案 4 :(得分:0)

将其放入index.html文件中:

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