Gwt 如何捕获用户离开页面并取消页面

Gwt 如何捕获用户离开页面并取消页面,gwt,Gwt,当用户离开GWT应用程序时,我会打开一个确认对话框,为他们提供留下的选择,即确认(“您确定要离开此页面”、“是”、“否”) 我知道如何建立拨号箱。:) 问题是,如何捕捉用户离开页面的事件以及如何取消它 Daniel您必须创建CloseHandler并在窗口中注册它: Window.addWindowClosingHandler(handler) 编辑:固定方法名称。查看aem注释和答案。调用,并向其传递一个调用Window.ClosingEvent的回调,如下所示: Window.addWind

当用户离开GWT应用程序时,我会打开一个确认对话框,为他们提供留下的选择,即确认(“您确定要离开此页面”、“是”、“否”)

我知道如何建立拨号箱。:)

问题是,如何捕捉用户离开页面的事件以及如何取消它


Daniel

您必须创建CloseHandler并在窗口中注册它:

Window.addWindowClosingHandler(handler)

编辑:固定方法名称。查看aem注释和答案。

调用,并向其传递一个调用Window.ClosingEvent的回调,如下所示:

Window.addWindowClosingHandler(new Window.ClosingHandler() {
      public void onWindowClosing(Window.ClosingEvent closingEvent) {
        closingEvent.setMessage("Do you really want to leave the page?");
      }
    });
(我已经添加了GWT2.0文档的链接;将这些URL中的2.0更改为1.6以查看GWT1.6/1.7文档。)


请注意,这样做,您不必自己创建对话框。

onModuleLoad()中调用下面的方法


离开页面导航或退出浏览器?我认为这种方法不存在?您的意思是addWindowCloseListener吗?自从GWT1.6以来,addWindowCloseListener已被弃用。您应该使用Window.addCloseHandler(handler)或Window.addCloseHandler(handler)。Isac,而不是对您的答案进行注释,您可以编辑它以提及当前函数。这不会满足问题的要求,因为addCloseHandler会向您传递CloseEvent,当关闭窗口为时已晚时会发生这种情况。addWindowClosingHandler允许您执行问题所要求的操作。看到了吗?如果我只想知道wepabb的最后一个窗口何时关闭呢?假设用户打开了一堆选项卡,我想知道他什么时候关闭最后一个选项卡,我如何才能做到这一点。
 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
                    }
                }
            }
        });
    }