Возврат к записи pushState, которая использовала ajax
У меня проблема со следующей ситуацией.
- пользователь посещает сайт
- пользователь нажимает ссылку, которая использует истории.pushState для обновления url
- частичное содержимое страницы, загруженное через ajax (с помощью jQuery)
- пользователь нажимает обычную ссылку, которая загружает новую страницу
- пользователь щелкает назад, чтобы вернуться к записи pushState
- страница теперь отображает только часть страницы, которая была получена через 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');
}
надеюсь, что это помогает.