【问题标题】:prompt user on backspace and browser backbutton in gwt在 gwt 中提示用户退格和浏览器后退按钮
【发布时间】:2014-06-11 02:16:46
【问题描述】:

当从一个类导航到另一个创建的历史时,我有两个类。现在,我想通过确认用户是否要离开页面来提示用户。直到现在,我尝试在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 中完成。

【问题讨论】:

  • onbeforeunload() 在 jsni 上不起作用,我也试过...
  • 在 gwt 中搜索此类功能
  • 因为你没有离开你的应用程序时使用“返回”onbeforeunload 不会触发。在这种情况下,另一种方法是监听 History 更改事件。
  • 它适用于 html 页面,但不适用于 gwt 项目。试图在 valuechangehandler() 上得到它,但我无法在那里得到提示。
  • 我遇到了一个问题,因为它在我调用该类时工作了两次,当我通过单击 browserback 按钮更改历史记录时

标签: java javascript gwt


【解决方案1】:

我在 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;
                            }
                }
        }                   
}-*/;

【讨论】:

  • onkeydown 对两个 brewser 都有效,但在 FF 中确认取消此调用上一课 ....?????????????/
  • 再次感谢您的帮助。我已经更新了帖子,我已经为 browser back button 以及所有浏览器的广告 backspace key 处理了它。
  • 不,我没用过这个功能。我已从@user3364549 询问的此链接how can we use onbefoerunload in GWT 获取输入
  • 我在歌剧和野生动物园上的 chkd 也很完美
【解决方案2】:

您是否尝试过使用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);
}

-- 编辑--

这里也是检测浏览器返回按钮的代码。欲了解更多信息,请查看

How to know whether refresh button or browser back button is clicked in firefox

public native void onBeforeUnload()/*-{

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

public void onModuleLoad() {

    onBeforeUnload();

}

截图(浏览器返回按钮被点击或页面被刷新)

请看下面的帖子:

【讨论】:

  • 是的,我试过 History.addValueChangeHandler 但它不起作用,我告诉你它在第一次调用类时工作了两次,并且在历史更改期间也是如此。
  • braj 仍然不适用于浏览器后退按钮。否则你的代码很有用。就像这样,我也用 jsni 尝试过。
  • 关于类的构造函数。现在,我还有一个问题要问你,如何在没有插件的情况下在 safari 和 Opera 浏览器上运行 gwt
  • 现在我面临浏览器兼容性问题
  • 你只需要开发模式的插件。在 tomcat 或任何其他服务器上部署你的战争并在任何浏览器中进行测试。
猜你喜欢
  • 2011-02-17
  • 2013-03-02
  • 2017-06-29
  • 2010-09-14
  • 2016-05-22
  • 2023-03-08
  • 2011-08-06
  • 1970-01-01
  • 2010-10-31
相关资源
最近更新 更多