繁体   English   中英

在gwt中提示用户退格和浏览器后退按钮

[英]prompt user on backspace and browser backbutton in gwt

从一个班级导航到另一个创建的历史记录时,我有两个班级。 现在,我想通过确认用户是否要离开页面来提示用户。直到现在,我尝试在gwt使用Window.closingHandler() ,但不适用于退格按钮和浏览器后退按钮,仅在关闭时有效整个浏览器或使用交叉的特定页面。 它也在重新加载。

我也尝试过Javascript,使用onbeforeunload()可以完美地工作。

这是我使用的代码。

JAVASCRIPT:

window.onbeforeunload = function () {
  return "Are you sure you wish to leave this delightful page?";
}

还有gwt中的其他代码:

Window.addWindowClosingHandler(new Window.ClosingHandler() {
    public void onWindowClosing(ClosingEvent event) {
        event.setMessage("Do you wanna close?");
        System.out.println("Closing...");
    }
});

我希望在gwt完成它。

您是否尝试过使用History.addValueChangeHandler侦听浏览器的历史记录堆栈中的更改?


-编辑-

下面的代码对于FirefoxChromeIE9 Backspace key正常工作。

注意:请同时对其他浏览器进行测试,如果有任何问题,请通知我。

    Event.addNativePreviewHandler(new Event.NativePreviewHandler() {

        @Override
        public void onPreviewNativeEvent(final NativePreviewEvent event) {
            boolean isFirefox = checkBrowser("Firefox");
            if ((isFirefox && event.getTypeInt() == Event.ONKEYPRESS)
                    || (!isFirefox && 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);

                    if (!tagName.equalsIgnoreCase("INPUT")
                            && !tagName.equalsIgnoreCase("TEXTAREA")) {

                        boolean result = Window.confirm("Are you sure?");
                        if (!result) {
                            event.cancel();
                        }
                    }
                }
            }
        }
    });

    if (checkBrowser("Firefox")) {
        DOM.sinkEvents(RootPanel.get().getElement(), Event.ONKEYPRESS);
    } else {
        DOM.sinkEvents(RootPanel.get().getElement(), Event.ONKEYDOWN);
    }

....

private static boolean checkBrowser(String browserName) {
    return (Window.Navigator.getUserAgent().toLowerCase().indexOf(browserName.toLowerCase()) != -1);
}

-编辑-

这也是代码检测浏览器的“后退”按钮。 欲了解更多信息,请看

如何知道在Firefox中单击了刷新按钮还是浏览器后退按钮

public native void onBeforeUnload()/*-{

    $wnd.onbeforeunload = function(e) {
        return 'Are you sure?';
    };
}-*/;

public void onModuleLoad() {

    onBeforeUnload();

}

屏幕截图(单击浏览器后退按钮或刷新页面)

在此处输入图片说明

在此处输入图片说明在此处输入图片说明

请看以下帖子:

我已经在JSNI中找到了它,但是在浏览器后退按钮中也无法正常工作。

public native void call()/*-{

    $wnd.onkeypress = GetChar;

     function GetChar (event)
     {
        var key = event.keyCode;

        var bb = event.target.nodeName;

             if(key==8 && bb=="BODY")
                {
                    var x= window.confirm("Are you sureyou want to leave the page");

                    if (x==true)
                            {
                                window.history.back();
                            }
                    else if(x==false)
                            {

                                return false;
                            }
                }
        }                   
}-*/;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM