Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.08.2015, 18:14
Профессор
Отправить личное сообщение для Маэстро Посмотреть профиль Найти все сообщения от Маэстро
 
Регистрация: 02.07.2010
Сообщений: 642

backbutton на смартфоне - как достучаться?
Есть на смартфонах сенсорная кнопка внизу экрана (на пластмассе). Вроде как называется "backbutton". Как можно в браузере ловить событие её нажатия?
Ведет она себя по-разному:
1. если на экране модальное окно, то её нажатие аналогично клавише Esc как на клавиатуре.
2. если модального окна нет, то срабатывает как кнопка "Back" в браузере, что приводит к перезагрузке страницы.
А мне не надо перезагрузки.. У меня аджакс-приложение.

По теме нашел некий фреймворк PhoneGap http://phonegap.com с библиотекой Cordova но мутно как-то там всё это..
Может кто-то знает как попроще?
Подскажите, пожалуйста.
Ответить с цитированием
  #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 - это внизу справа. Но на смартфоне есть аналогичная кнопка внизу слева, которая в основном вызывает стандартное меню. Вот как её перехватить в браузере?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
initComponent: Как получить данные родителя и как получить store для вызова load()? Пролетарий ExtJS 76 04.07.2015 09:22
Как сделать что бы картинки с другого url отображались как свои zlodey Серверные языки и технологии 1 04.05.2015 21:30
Как мне достучаться до значения объекта в массиве lawer85 Общие вопросы Javascript 4 14.02.2015 21:12
Как правильно реализовать такой функционал? Julian Общие вопросы Javascript 3 16.01.2015 12:34
Как включить синхронное выполнение строк? SkaN Элементы интерфейса 1 26.04.2012 22:28