Autor Zpráva
Norman
Profil
Zdravím,

v souvislosti s Bind popstate, handle back button tímto tématem, bych měl na Vás lidi ještě jeden dotaz. Zkoušel jsem to zhora zleva zprava zdola, ale nedaří se.

Konkrétně:

$location = location.pathname;

var popped = ('state' in window.history), initialURL = location.href;
        $(window).bind('popstate', function(event){
            var initialPop = !popped && location.href == initialURL;
            popped = true;
            if ( initialPop ) return;
            var state = event.originalEvent.state;
            if(state && state.url){
                window.location.replace(state.url);
            }
        });

      var popused;
        popused = false;
        if(!popused){
            history.pushState({url: $location}, document.title, $location);
            popused = true;
        }

problém je v tom, že pokud pomocí push state uložím proměnou a zmáčknu talčítko zpět(v browseru) tak se promena nezobrazi (v konzoli) az pokud je push state po druhe obevi se promena. To jsem zafixoval timto:

var popused;
        popused = false;
        if(!popused){
            history.pushState({url: $location}, document.title, $location);
            popused = true;
        }

jenomže, ať se snažim jak se snažím tak to jde zpět jenom do jedné úrovně. (/home -> /books -> /product <- /books <- a zpět na home už nefunguje).
Navíc tímto definováním, viz kód výše se stává to, že abych se dosal na předešlou url musím kliknout 2x na back button..


Nevíte někdo jak z této situace ven ?
Norman
Profil
Díky už jsem to vyřešil :), celou situaci šlo řešit jednodušeji :)

$absoluteUrl = location.href;

$(window).bind('popstate', function(event){

   if(location.href !== $absoluteUrl){
       window.location.replace(location.href);
   }

});

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0