Можно ли закрыть pop-up по клику на кнопке back на смартфоне/планшете?

Здравствуйте. Собственно, вопрос - в заголовке)
Существует ли в js какой-то обработчик кнопки "назад" мобильных устройств?
  • Вопрос задан
  • 521 просмотр
Пригласить эксперта
Ответы на вопрос 1
@rejjer
Теоретически должно помочь.
1. определите, что сейчас используется смартфон/планшет
2. если да: объявите какую-нибудь глобальную переменную, которая отвечала бы за открытие попапа (myPopupOpen) и добавьте это при вызове попапа:
history.pushState(null, null, null); // добавляем пустой стейт в историю
window.onpopstate = function(event) {
    if (popupOpen) {
    	closePopUp(); // закрываем попап
    }
    window.onpopstate = null; // удаляем обработчик события перехода по истории
};

Но нужно учитывать, что на кнопку 'вперед' мы теперь перейдем на пустой стейт (на странице ничего не поменяется), а удалять стейты нельзя, соответственно у пользователя может возникнуть недопонимание.

Можно решить так:
Использовать какой-нибудь осмысленный якорь history.pushState(null, null, '#myPopup') и обработчик onpopstate сделать глобальным и не удалять, а при срабатывании - смотреть на window.location.hash, если там пусто - скрывать попап, когда он открыт (по той myPopupOpen) и открывать, если там есть якорь нужного попапа.
Переменная тут необходима, потому как мы не можем узнать, что за якорь был на предыдущем стейте (document.referrer возвращает строку до #). Так же важно не наплодить одинаковых стейтов рядом, но тут уже все в ваших руках.

HTML5 History API (хабр)
HistoryJS (для тех, кто не поддерживает HTML5 history API)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы