Подтвердить что ты не робот

Есть ли способ поймать событие кнопки "Назад" в javascript?

Есть ли способ ответить на нажатие кнопки назад (или нажатие на обратное пространство) в javascript, когда изменяется только хеш местоположения? То есть, когда браузер не взаимодействует с сервером или не перезагружает страницу.

4b9b3361

Ответ 1

Используйте событие hashchange:

window.addEventListener("hashchange", function(e) {
  // ...
})

Если вам нужно поддерживать более старые браузеры, ознакомьтесь с hashchange секцией > в странице вики-страницы Polyphills в браузере Modernizr HTML5.

Ответ 2

Я создал решение, которое может быть полезно для некоторых людей. Просто добавьте код на свою страницу, и вы можете написать свою собственную функцию, которая будет вызываться при нажатии кнопки "Назад".

Я тестировал в IE, FF, Chrome и Safari, и все они работают. Однако решение, основанное на iframe, без необходимости постоянного опроса, в IE и FF, из-за ограничений в других браузерах, в Safari используется хеш местоположения.

Ответ 3

Я сделал забавный взлом, чтобы решить эту проблему до моего удовлетворения. У меня есть сайт AJAX, который динамически загружает контент, а затем изменяет window.location.hash, и у меня был код для работы с $(document).ready() для синтаксического анализа хэша и загрузки соответствующего раздела. Дело в том, что я был совершенно доволен кодом загрузки раздела для навигации, но хотел добавить способ перехвата кнопок браузера назад и вперед, которые меняют местоположение окна, но не мешают моим текущим подпрограммам загрузки страницы, где я манипулирую window.location, и опрос окна. Ячейка с постоянными интервалами не может быть и речи.

В результате я создал объект как таковой:

var pageload = {
    ignorehashchange: false,
    loadUrl: function(){
        if (pageload.ignorehashchange == false){
            //code to parse window.location.hash and load content
        };
    }
};

Затем я добавил строку на мой сайт script для запуска функции pageload.loadUrl на hashchange как таковой:

window.addEventListener("hashchange", pageload.loadUrl, false);

Затем, в любое время, когда я хочу изменить window.location.hash, не запуская эту процедуру загрузки этой страницы, я просто добавляю следующую строку перед каждой строкой window.location.hash =:

pageload.ignorehashchange = true;

а затем следующую строку после каждой строки модификации хэш:

setTimeout(function(){pageload.ignorehashchange = false;}, 100);

Итак, теперь мои процедуры загрузки разделов обычно запускаются, но если пользователь нажимает кнопки "назад" или "вперед", новое местоположение анализируется и загружается соответствующий раздел.

Ответ 4

Отъезд history.js. Существует событие изменения состояния html 5 и вы можете его прослушать.

Ответ 6

onLocationChange также может быть полезна. Не уверен, что это только Mozilla, но кажется, что это может быть.