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 има доста грешки с HTML5 History API - всъщност всички HTML5 браузъри работят по различен начин един от друг, така че функционалността не е толкова стандартна в момента.

Има History.js, който решава проблемите със съвместимостта между различни браузъри и също така предоставя незадължителен резервен HTML4 хеш ако искаш. Можете също така да се обърнете към раздела „Бележки относно съвместимостта“ за информация относно всички грешки в браузъра, които коригира.

person balupton    schedule 23.03.2011