Показать сообщение отдельно
  #2 (permalink)  
Старый 18.08.2015, 15:48
Профессор
Отправить личное сообщение для Маэстро Посмотреть профиль Найти все сообщения от Маэстро
 
Регистрация: 02.07.2010
Сообщений: 642

Разобрался.
По этой сенсорной кнопке в браузере не возникают никакие события типа ontouch или onkeydown. Однако, при нажатии этой кнопки меняется window.location.hash. А если изменилось значение hash, то возникает событие onhashchange.

Идея заключается в том, чтобы перед показом на экране своей псевдомодальной диалоговой панели (например, Меню) прописать в hash некое "секретное" слово. Оно изменится при нажатии backbutton и сработает событие onhashchange, которое мы ловим.

function openmenu()
{
// ... показываем панель на экране
window.location.hash = 'menu';
};

function closemenu()
{
// ...скрываем меню
window.location.hash = '';
};

window.onhashchange = function()
{
 var s = window.location.hash.toString();
 if (s != '#menu')
  {
  // ... проверить наличие панели и видимость её на экране
  // ... скрыть панель
  }
};

Но при манипуляции hash в адресной строке браузера к тексту добавляется секретное слово "#menu", что не всем понравится.
Что хуже, при стирании (hash = '') в адресной строке остается символ #. И лично мне такое совсем не нравится.
Поэтому надо использовать histAPI:
function openmenu()
{
// ... 
history.pushState('', document.title, window.location.pathname + '#menu');
};

function closemenu()
{
// ...
history.pushState('', document.title, window.location.pathname);
};


На закуску вопрос: backbutton - это внизу справа. Но на смартфоне есть аналогичная кнопка внизу слева, которая в основном вызывает стандартное меню. Вот как её перехватить в браузере?
Ответить с цитированием