обработчик onpopstate - кнопка возврата ajax - PullRequest
8 голосов
/ 10 марта 2011

Я использую pushState для создания значимых URL для контента ajax на моем сайте. Я хочу обновить содержимое ajax, когда пользователь нажимает кнопки вперед или назад. У меня, однако, проблемы, так как хром (правильно) влияет на состояние как на «обходе истории» (кнопки «вперед / назад»), так и на «конце» (загрузка страницы). Я хотел бы создать обработчик onpopstate, который различает загрузку страницы и обход истории, так как я не хочу обновлять свой ajax-контент, если он только что был успешно загружен. Кто-нибудь может помочь мне провести различие между ними?

window.onpopstate = function (event) {
    // If : Forward/back button pressed
        // Reload any ajax content with new variables
    // Else : Page load complete
        // Do nothing - content already loaded and correct
}

См. http://code.google.com/p/chromium/issues/detail?id=63040 для более подробной информации о хроме и onpopstate.

Спасибо

Ответы [ 3 ]

8 голосов
/ 10 марта 2011

Один из способов - инициализировать переменную в false при загрузке страницы, а затем в событии popstate проверить эту переменную. Если это все еще ложь, установите это в истину и ничего не делайте. С этого момента все ваши другие события в popstate должны быть только событиями back / forward.

var loaded = false;

window.onpopstate = function(e) {
    if (!loaded) {
        loaded = true;
        return;
    } else {
        // run your stuff...
    }
}
3 голосов
/ 12 июля 2012

Объект, передаваемый в функцию onpopstate, будет иметь член state, который будет null при загрузке страницы, поэтому вы можете сделать что-то вроде этого:

window.onpopstate = function(event) {
  if(event && event.state) {
    // ...
  }
}
1 голос
/ 05 сентября 2014

// пример: http://www.nseri.com/news/5536

window.onpopstate = function(e) {
     var count = String(location.pathname).split('/').length;
     if (count<4) {
          location.href = location.href;
     }else {
          $.ajaxLoad(location.pathname);
     }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...