Как перехватить кнопку “назад” браузера?

658
31 января 2017, 23:44

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

Как перехватить событие возврата на страницу, чтобы можно было ее обновить?

Answer 1

В комментариях верно написали, что ответ кроется не в перехвате события "назад" у браузера, а сохранении состояния страницы

Например, пользователь может изменить тему страницы. Что бы при возвращении на эту страницу, была выбрана нужная тема, сохраним ее в localStorage

const savePageState = (name, state) => {
    localStorage[name] = state;
}
const loadPageState = (name) => {
    return localStorage[name];
}

Дальше, при нужных вам событиях, вы просто сохраняете в localStorage нужные вам данные, а при загрузке страницы (onload событие, например) выгружаете нужные данные и используете их

Answer 2

Раз пользователь может изменить вид страницы, значит, работает javascript. В нем надо при обработке пользовательских действий подменить последний элемент в истории браузера, чтобы возврат происходил уже на указанную вами страницу (или тот же адрес, но с параметрами).

Вот пример.

Код скрипта:

$('.portfolio_filter').each(function(){
    var $this_filter = $(this);
    $this_filter.on('click', 'a', function(){
        var project_type = $(this).data('optionValue').slice(1);
        var url = window.location.href;
        if (url.indexOf('?') >= 0) {
            url = url.slice(0, window.location.href.indexOf('?'));
        }
        if (project_type) {
            url = url + '?type=' + project_type;
        }
        // console.log('url: ' + url);
        window.history.replaceState(null, document.title, url);
        return false;
    });
});

При клике не кнопку на странице в историю дописывается url типа http://sws-group.zephyrlab.ru/projects/?type=commercial После просмотра проекта категории commercial возврат идет уже на url с ?type=commercial.

READ ALSO
Как отсечь градиент

Как отсечь градиент

В общем думал как реализовать освещение в 2d игре, нашел вот такой замечательный пример http://codepenio/ilovepixel/pen/qBjCH

366
java script событие

java script событие

Когда я нажимаю на кнопку создается элемент с текстом и резко исчезает

384
Всплывающее окно на сайте в IE

Всплывающее окно на сайте в IE

Нем могу понять в чем проблема, во всех браузерах нормально работает, а в IE нетСуть проблемы, блок появляется и через секунду сразу исчезает,...

346