Здесь я столкнулся с проблемой с приведенным ниже кодом, который я написал для обнаружения browser's close event, чтобы сделать пользователя logged out с веб-сайта.

Но, к сожалению, это событие также срабатывает на Refresh :(.

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

Да я прошел GWT обнаруживает обновление браузера в CloseHandler

Но никаких положительных результатов я там не обнаружил.

Согласно GWT Window.ClosingEvent API класса:

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

Но у меня все еще есть надежда, что мы сможем обнаружить browser refresh.

Кто-нибудь может намекнуть по этому поводу?

1
Suresh Atta 15 Фев 2013 в 19:39

1 ответ

Лучший ответ

Невозможно узнать, вызывается ли 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;
    }
}
4
Italo Borssatto 16 Фев 2013 в 00:48
Код действительно работает. Может, не так, как ты хочешь, правда?
 – 
Italo Borssatto
21 Фев 2013 в 04:15