2013-02-15 3 views
1

여기 웹 사이트에서 사용자 logged out을 만들려면 browser's close event을 검색하기 위해 아래 코드에 문제가 있습니다. 브라우저 새로 고침시 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이 호출되는지 여부는 알 수 없습니다. 그러나 문제가 브라우저를 닫은 경우에만 검색하는 경우 세션 쿠키를 사용할 수 있습니다.

다음은 유용한 유틸리티 클래스입니다. 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. –

+0

@ TheSureshAtta 코드가 작동합니다. 당신이 원하지 않는 것 같아, 그렇지? –

관련 문제