2016-10-07 8 views
1

Я работаю над одной страницей без фреймворков. Легкая одиночная страница без использования фреймворков. Я использую хэш-систему с history.pushState, поэтому в зависимости от щелчка div я назначаю другой хеш. Например:Обновление страницы Chrome заставляет window.history.back()

 var stateObj = { id: "file" }; 


     $(document).on('click', "#foo", function() { 
           showTemplate(templates_main, data); 
           history.pushState(stateObj, "page 1", '#foo') 

     }), 

     $(document).on('click', "#faa", function() { 
           showTemplate(templates_main, data); 
           history.pushState(stateObj, "page 1", '#faa') 

     }), 

Перед отправкой формы pushState будет иметь такое же поведение в обоих браузерах.

  • URL-адрес страницы == index.html
  • Нажмите #foo, URL == index.html#foo
  • Нажмите #faa URL == index.html#faa
  • Нажмите назад URL должен быть index.html#foo

После подачи форма, новая страница создается с использованием perl. Если заданные параметры неверны, созданная страница будет содержать кнопку, которая запускает window.history.back(), чтобы повторить попытку.

Это работает для Firefox, который также возвращает все данные imput при нажатии.

Проблема начинается с Chrome, так как после отправки формы и нажатия кнопки «Назад» я вижу, что Chrome переходит первым до index.html#foo, а затем автоматически обновляет страницу, в результате чего URL == index.html.

Я знаю, что если вы хотите заставить Firefox вести себя как Chrome или IE, вы можете добавить onunload="" в тело. Но есть ли что-то, что я могу добавить в тело или что-нибудь, что я могу сделать, чтобы заставить Chrome вести себя как Firefox и не перезагружать страницу?

  • Почему Chrome это делает?
  • Как я могу избежать обновления страницы? или
  • Как изменить страницу в исходное состояние, когда было выполнено history.back() после перезагрузки страницы?

Что-то вроде:

onclick="window.location.href=document.history.length(-1)" 

Спасибо,

ответ

1

Для меня Chrome заставляет обновления страницы только тогда, когда history.back() запускается после полной загрузки файла.