Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> History events
flashdev
post 25.08.2011, 21:09:46
Post #1





Grupa: Zarejestrowani
Postów: 812
Pomógł: 117
Dołączył: 2.12.2008

Ostrzeżenie: (10%)
X----


Wie ktoś jak to jest zrobione np. na fecebook`u to, że skrypt potrafi wykryć kiedy użytkownik przechodzi do strony wstecz?
Mam dynamiczną stronę, na której treść jest ładowana przez js i kiedy przechodze do jakiejś podstrony to zmieniam adres na adresstrony.pl/#podstrona.
Chciałbym wykryć kiedy użytkownik przechodzi wstecz/dalej używając nawigacji przeglądarki i zaserwować mu odpowiednią treść.
Na facebooku jest to wogóle w niezrozumiały dla mnie sposób rozwiązane, ponieważ zmienia się adres w przeglądarce przed znakiem '#', a mimo to strona nie jest wcale odświeżana.
Oszczędzi mi ktoś zabawy w reverse engineering i poda link do jakiegoś wytłumaczenia?
Z góry dzięki.

Wykrycie zmiany adresu naturalnie mógłbym zrealizować przy pomocy setInterval, ale z oczywistych względów tego rozwiązania chciałbym uniknąć.


--------------------
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
flashdev
post 25.08.2011, 21:42:45
Post #2





Grupa: Zarejestrowani
Postów: 812
Pomógł: 117
Dołączył: 2.12.2008

Ostrzeżenie: (10%)
X----


Cytat(kamil4u @ 25.08.2011, 22:31:03 ) *
http://benalman.com/projects/jquery-hashchange-plugin/ - to jest w jQuery, nie każ mi analizować kodu smile.gif

--edit--
Tak na szybko patrząc tam też jest setInterval. Ta metoda w gruncie rzeczy nie jest zła. Takie obciążenie dla przeglądarki to żadne obciążenie.


Nie każę Ci niczego analizować, ale dzięki za pomoc.
JQuery nie używam w aktualnym projekcie, a już skrobnąłem coś takiego na szybko przy pomocy EventListener`a.

Kod
var MyHistory = (function(){
  var el = EventListener(['change']);
  var lastHref = location.href;
  setInterval(function(){
    if( location.href !== lastHref ){
      el.invoke('change', location.href, lastHref);
      lastHref = location.href;
    }
  }, 20);
  return {
    addEventListener: el.add,
    removeEventListener: el.remove
  };
})();

MyHistory.addEventListener('change', function(curr, last){
  console.log(last + ' -> ' + curr);
});


Tylko tak jak już pisałem wcale mi się to rozwiązanie nie podoba, dlatego to rozwiązanie potraktuję jako tymczasowe. Na facebooku to jakoś zrobili, więc jeśli nikt nic nie podpowie to będę musiał przeanalizować ich kod.


--------------------
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 20:21