2015-01-31 4 views
4

У меня есть трехэтапная форма входа, которая показывает/скрывает содержимое на странице по мере продвижения. Когда пользователь переходит от этапа 1 к шагу 2, я называю следующее:Обнаружение кнопки браузера Назад после использования history.pushState

var stateObj = { foo: "bar" }; 
history.pushState(stateObj, "", ""); 

И я вижу кнопку браузера обратно включить.

Теперь я пытаюсь поймать кнопку «Назад», чтобы я мог скрывать/показывать содержимое (например, обратно на этап 1) соответственно.

Как я могу определить кнопку браузера в этом сценарии? Я не хочу, чтобы URL-адрес изменился, я просто хочу вызвать некоторую функцию JS, когда пользователь ударит обратно. Я ориентируюсь на современные настольные/мобильные браузеры.

+0

Возможный дубликат [history.pushstate сбой браузера назад и кнопка вперед] (http://stackoverflow.com/questions/22751023/history-pushstate-fails-browser -back-and-forward-button) –

ответ

8

Вы можете использовать onpopstate событие.

window.onpopstate = function(event) { 
    alert("location: " + document.location + ", state: " + JSON.stringify(event.state)); 
}; 

Для получения дополнительной информации см the MDN page about the onpopstate event.

+0

круто! есть ли способ сделать это и для кнопки «вперед»? – SB2055

+1

Согласно документации, событие запускается каждый раз, когда pushstate изменяется между двумя состояниями внутри одного документа. Состояние изменяется для кнопки «Назад» так же, как кнопка «вперед», поэтому это должно работать для обоих. – bigblind

1

Чтобы обнаружить кнопку назад вы связываться с popstate события:

$(window).bind("popstate", function(e) { 
    var state = e.originalEvent.state; 
    if (state === null) { 
     console.log("step one"); 
    } else { 
     console.log(state.foo); 
    } 
}); 
Смежные вопросы