Возврат к записи pushState, которая использовала ajax

У меня проблема со следующей ситуацией.

  1. пользователь посещает сайт
  2. пользователь нажимает ссылку, которая использует истории.pushState для обновления url
  3. частичное содержимое страницы, загруженное через ajax (с помощью jQuery)
  4. пользователь нажимает обычную ссылку, которая загружает новую страницу
  5. пользователь щелкает назад, чтобы вернуться к записи pushState
  6. страница теперь отображает только часть страницы, которая была получена через ajax

Я создал сайт с помощью pushState для различных вещей, и результат-потрясающе отзывчивое веб-приложение, но эта проблема мешает мне использовать это.

вот пример кода:

$('a').live('click', function(){
  history.pushState({}, '', this.href);
  popstate(this.href);
  return false;
});

popstate = function(url){
  $('#content').load(url);
}
window.onpopstate = function(event){
  popstate(window.location.href);
  event.preventDefault();
}

Примечания:

  • при размещении оповещения в окне.функция onpopstate похоже, что событие не запускается на шаге 5. Это жук?
  • проблема возникает только при использовании ajax.
  • мне пришлось отделить функцию popstate, чтобы я мог вызвать ее после pushState. Есть ли способ вручную запустить окно.событие onpopstate?

1 ответов


Кажется, что некоторые браузеры часто путают частичную загрузку через ajax и всю страницу, украшенную ее макетом. Это потому что они оба имеют один и тот же URL. Поэтому, когда пользователь нажимает кнопку "Назад", браузер не загружает URL-адрес и просто отображает часть, которую он ранее загрузил через ajax.

чтобы избежать этого и поддерживать два отдельных внутренних кэша (один для частичной страницы и один для всей страницы), вы должны добавить параметр GET в URL, когда вызов через ajax. Как это в вашем коде:

popstate = function(url){
  $('#content').load(url+'?_ajax=1');
}

надеюсь, что это помогает.