2013-02-15 148 views
1

在这里,我面临的问题与我写下来的代码检测browser's close event使用户logged out从网站。GWT WindowClosingHandler刷新浏览器刷新

但不幸的是在Refresh此事件触发太:(。

Window.addWindowClosingHandler(new Window.ClosingHandler() { 
    public void onWindowClosing(Window.ClosingEvent closingEvent) { 
     closingEvent.setMessage("Do you really want to close the page?"); 
    } 
}); 

是的,我通过 GWT detect browser refresh in CloseHandler

走了,但我没有发现任何积极的结果出现。

按GWT Window.ClosingEvent class api:

Fired just before the browser window closes or navigates to a different site. 

但我仍然希望能够检测到browser refresh

任何人都可以提供这方面的提示吗?

回答

4

知道是否调用Window.ClosingEvent来刷新或关闭浏览器是不可能的。但是,如果您的问题只是检测浏览器是否已关闭,则可以使用会话Cookie。

这里有一个工具类可以帮助你。只需拨打onModuleLoad下面的行即可进行测试。

测试线

@Override 
public void onModuleLoad() { 
    if (BrowserCloseDetector.get().wasClosed()) { 
     GWT.log("Browser was closed."); 
    } 
    else { 
     GWT.log("Refreshing or returning from another page."); 
    } 
} 

实用类

import com.google.gwt.user.client.Cookies; 
import com.google.gwt.user.client.Window; 

public class BrowserCloseDetector { 
    private static final String COOKIE = "detector"; 
    private static BrowserCloseDetector instance; 

    private BrowserCloseDetector() { 
     Window.addWindowClosingHandler(new Window.ClosingHandler() { 
      public void onWindowClosing(Window.ClosingEvent closingEvent) { 
       Cookies.setCookie(COOKIE, ""); 
      } 
     }); 
    } 

    public static BrowserCloseDetector get() { 
     return (instance == null) ? instance = new BrowserCloseDetector() : instance; 
    } 

    public boolean wasClosed() { 
     return Cookies.getCookie(COOKIE) == null; 
    } 
} 
+0

谢谢你的饼干hint.but不是为我工作。 – 2013-02-16 21:27:55

+0

@TheSureshAtta代码确实有效。也许不像你想要的,对吧? – 2013-02-21 00:15:15