window.history.pushState не возвращается в историю

У меня небольшая проблема с экспериментом с событием history.pushstate. Я настроил его так, чтобы URL-адрес страницы был фактическим URL-адресом страницы, загруженной через AJAX, и это отлично работает.

Я так понял, что он должен автоматически создавать историю, загружая ранее загруженные страницы. к сожалению, этого не происходит, и когда я нажимаю «Назад» или «Вперед», URL-адрес меняется, но не страница. Вы можете помочь мне? Вот мой упрощенный код:

    function hijackLinks() {
        $('a').live("click", function (e) {
            e.preventDefault();
            loadPage(e.target.href);    
            direction = $(this).attr('class');        
        });   
    }


    function loadPage(url) {
        if (url === undefined) {
            $('body').load('url', 'header:first,#content,footer', hijackLinks);
        } else {
            $.get(url, function (data) {
                $('body').append(data);
                 window.history.pushState(url, url, url);

                if (direction === "leftnav") {
                   //DO STUFF
                }
                if (direction !== "leftnav") {
                   //DO STUFF
                }

                setTimeout(function () {
                  //DO STUFF
                },1000);
            });
        }
    }
    $(document).ready(function () {
        loadPage(); 

    });

person cmplieger    schedule 22.03.2011    source источник
comment
я нацелен только на сафари :), изначально   -  person cmplieger    schedule 23.03.2011
comment
Я объединил дубликат этого, который вы задали, в этот вопрос.   -  person Tim Post♦    schedule 23.03.2011


Ответы (3)


Разобрался, добавил:

    window.addEventListener("popstate", function(e) {
    loadPage(location.pathname);
});

до конца страницы

person cmplieger    schedule 22.03.2011
comment
я пока не могу, только завтра :) - person cmplieger; 23.03.2011
comment
Просто совет, который я обнаружил при реализации чего-то подобного. При обработке события popstate не делайте другого pushstate, вместо этого используйте replacestate, таким образом вы сохраните цепочку назад и вперед для браузера. - person Nicolo77; 05.01.2012
comment
Имеет смысл, зачем вам получать другие события, такие как загрузка окна? Вся история должна быть пройдена. - person David Merrilees; 23.03.2012
comment
можете ли вы сказать мне, что такое loadPage(location.pathname); потому что это моя проблема сейчас - person masih arastooyi; 25.07.2013
comment
@masiharastooyi я загружаю свою функцию loadPage, используя текущий URL-адрес в качестве переменной. - person cmplieger; 08.08.2013
comment
@ Nicolo77, твой комментарий был важен. Не видел этого в других ответах, если вы это сделаете, пожалуйста, дайте ссылку. Спасибо! - person Davi Lima; 01.05.2016

У меня такая же проблема, но я ее исправил. Это очень легко

пример кода:

window.addEventListener("popstate", function(e) {
    window.location.href = location.href;
});
person Avtandil Kavrelishvili    schedule 24.02.2016
comment
У меня тоже работает - person Gabriel Glauber; 26.07.2018

Да, Safari iOS имеет довольно много ошибок с API истории HTML5 — на самом деле, все браузеры HTML5 работают по-разному, поэтому функциональность сейчас не такая стандартная.

Существует History.js, который решает проблемы совместимости между браузерами, а также предоставляет дополнительный резервный хэш HTML4. если хочешь. Вы также можете обратиться к разделу «Примечания о совместимости» для получения информации обо всех ошибках браузера, которые он исправляет.

person balupton    schedule 23.03.2011