2012-05-10 3 views
14

В принципе, у меня есть страница, которая содержит форму. Когда пользователь отправляет эту форму, вызывается функция Javscript, и пользователь динамически представляется с новой формой.Добавить в журнал просмотра без перезарядки страницы

На этом этапе я хочу, чтобы пользователь мог нажать кнопку возврата браузера и вернуться к первой форме. Это возможно?


Спасибо за быстрые ответы, но у меня возникли проблемы с запуском pushState. После нажатия кнопки «Назад» HTML по-прежнему отображается «вторая форма».

Вот код, который я использовал, чтобы проверить это:

<script> 
function newPage(){ 
    history.pushState({state:1}, "State 1", "?state=1"); 
    document.getElementById('formBox').innerHTML="second form"; 
} 
</script> 


<input type="button" onclick="newPage();" value="forward" /> 
<div id='formBox'>first form</div> 

ответ

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

Соответствующие link to the docs.

+0

Это прекрасно, если вы не возражаете против его взлома в старых браузерах. –

+4

@MichaelRobinson (но в основном для будущих разработчиков, которые находят этот ответ). Такие функции следует рассматривать в настоящее время как приятное дополнение, чтобы улучшить работу пользователей. Неудобство отсутствия опции «назад» не разбивает сайт, и резервные копии могут быть реализованы, например, событие «beforeunload». Поскольку браузеры продвигаются вперед, это должен быть правильный ответ, потому что это родной javascript. –

+2

Я знаю, что это произошло из документов так же, как вы его написали, но знаете ли вы, какой эффект имеет stateObj? Какова цель foo: и "bar"? – Luke

14

я достиг подобного поведения с/государственных API, истории HTML5, используя History.js, описывается следующим образом:

Обеспечить крест совместимый опыт для всех браузеров HTML5 (все они реализуют API истории HTML5 немного по-другому, вызывая различные типы поведения, а иногда и ошибки. History.js исправляет это , гарантируя, что опыт такой же Ожидается,/то же/большой во всем браузеры HTML5)

Пример:

History.pushState({state:1}, "State 1", "?state=1"); 
+2

Это встроенная функциональность JS, не нуждающаяся в библиотеке. –

+4

Не перекрестный браузер это не –

+0

Согласитесь, но historyjs довольно удобен – MilkyWayJoe