Я играю с window.onpopstate
, и есть кое-что, что меня немного раздражает:
Браузеры, как правило, обрабатывают событие popstate по-разному при загрузке страницы. Chrome и Safari всегда генерируют событие popstate при загрузке страницы, но Firefox не работает.
Я тестировал его, и да, в Chrome и Safari 5.1+ событие popstate запускается при загрузке страницы, но не в Firefox или IE10.
Проблема заключается в том, что я хочу слушать только события popstate
, где пользователь нажал кнопку "Назад" или "Переслать" (или история была изменена с помощью javascript), но не хочет ничего делать в pageload.
Другими словами, я хочу различать событие popstate
от загрузки страницы из других событий popstate
.
Это то, что я пробовал до сих пор (я использую jQuery):
$(function() {
console.log('document ready');
setTimeout(function() {
window.onpopstate = function(event) {
// Do something here
}, 10);
});
В основном я пытаюсь привязать функцию listener
к popstate
достаточно поздно, чтобы не быть привязанным к загрузке страницы, только позже.
Кажется, что это работает, но мне не нравится это решение. Я имею в виду, как я могу быть уверенным, что таймаут, выбранный для setTimeout, достаточно велик, но не слишком большой (потому что я не хочу, чтобы он слишком долго ждал).
Я надеюсь, что есть более разумное решение!