Как вызвать функцию выхода из браузера / вкладки закрыть [дубликат]

У меня была аналогичная проблема в Firefox и Safari при работе с AngularJS. Например, если дата, возвращаемая из Angular, выглядит так:

2014-06-02 10:28:00

с помощью этого кода:

new Date('2014-06-02 10:28:00').toISOString();

возвращает недопустимую ошибку даты в Firefox и Safari. Однако в Chrome он отлично работает. Как сказал еще один ответ, Chrome, скорее всего, будет более гибким с синтаксическими строками даты.

Моя конечная цель состояла в том, чтобы отформатировать дату определенным образом. Я нашел отличную библиотеку, которая обрабатывала проблему совместимости с кросс-браузером и проблему форматирования даты. Библиотека называется moment.js .

Используя эту библиотеку, следующий код работает правильно во всех проверенных вами браузерах:

moment('2014-06-02 10:28:00').format('MMM d YY')

Если вы хотите чтобы включить эту дополнительную библиотеку в ваше приложение, вы можете легко построить свою строку даты, избегая при этом проблем с совместимостью с браузером. В качестве бонуса у вас будет хороший способ легко форматировать, добавлять, вычитать и т. Д., Если это необходимо.

14
задан sanastasiadis 23 September 2015 в 22:40
поделиться

2 ответа

Вы можете добиться этого, выполнив HttpSessionBindingListener, вам нужно зарегистрировать сеанс, который содержит блокировку, вызвав registerSession (строка «sessionBindingListener» не может быть изменена). Контейнер обратится к методу valueUnbound() после окончания сеанса и до того, как сеанс будет уничтожен.

public class ObjectLock implements Serializable,HttpSessionBindingListener {
    public void valueBound(HttpSessionBindingEvent event) {
        log.info("valueBound:" + event.getName() + " session:" + event.getSession().getId() );

    }

    public void registerSession() {
        FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put( "sessionBindingListener", this  );
        log.info( "registered sessionBindingListener"  );
    }

    public void valueUnbound(HttpSessionBindingEvent event) {
        log.info("valueUnBound:" + event.getName() + " session:" + event.getSession().getId() );
               // add you unlock code here:
        clearLocksForSession( event.getSession().getId() );
    }
}
18
ответ дан stacker 4 September 2018 в 09:28
поделиться

Еще одно элегантное решение:

Просто добавьте аннотацию @PreDestroy в Session-Bean! Если сеанс будет уничтожен, он предварительно вызовет PreDestroy на всех SessionBeans, там вы можете выйти и все!

Хотя это в настоящее время не работает со многими ApplicationServers, кажется, это нечеткий сегмент Спецификация JSF. Итак, переход с принятым ответом (HttpSessionBindingListener) будет необходим, пока @PreDestroy не будет работать на всех серверах.

4
ответ дан Falco 4 September 2018 в 09:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: