2012-05-02 16 views
6

Moje Google-fu niczego nie wyciąga.Czy jest wywołanie zwrotne dla History.pushstate?

Kiedy to zrobić:

var stateObj = { state: "some state" }; 
history.pushState(stateObj, "page 2", "other.htm"); 

Czy istnieje skojarzony okno zwrotna?

wiem, że to jest:

window.onpopstate = function() { 

} 

Który działa świetnie do słuchania, gdy użytkownik kliknie przycisk Wstecz. Jednak chcę słuchać za każdym razem, gdy adres URL się zmienia i nie jestem pewien, jak to zrobić.

Czy istnieje globalne oddzwanianie za każdym razem, gdy zmienia się adres URL?

+0

http://stackoverflow.com/questions/680785/on-window-location-hash-change – Joe

+0

Spróbuj powiązać go z elementem, a następnie sprawdź wartość typeof (typeof elem.onpopstate), jeśli jest niezdefiniowana, nie jest obsługiwana , jeśli jest to funkcja wszystko dobrze. http://perfectionkills.com/detecting-event-support-without-browser-sniffing/ jak uzyskać – GillesC

+2

możliwy duplikat [Jak uzyskać powiadomienie o zmianach w historii przez history.pushState?] (http: // stackoverflow. com/questions/4570093/how-to-get-notification-of-the-history-via-history-pushstate) – thekevinscott

Odpowiedz

12

Nie, nie ma numeru onpushstate lub czegoś podobnego. Jednak łatanie małej małpy może to naprawić:

var pushState = history.pushState; 
history.pushState = function() { 
    pushState.apply(history, arguments); 
    fireEvents('pushState', arguments); // Some event-handling function 
}; 

Powiadomi cię to tylko wtedy, gdy użyjesz funkcji pushState. Prawdopodobnie chciałbyś zrobić coś podobnego dla replaceState.

Jeśli musisz być powiadamiany za każdym razem, gdy adres URL się zmieni, to niektóre kombinacje powyższych i procedura wymiany hash będą Ci pomagać w większości przypadków.

+1

Co wiesz, [to] (http://stackoverflow.com/questions/4570093/how- aby uzyskać powiadomienie o zmianach historii poprzez historię) jest prawie identyczne, podobnie jak odpowiedź. : P –

+0

Czy to może sprawić Ci kłopoty? Na przykład. robiąc to na stronie trzeciej, gdzie ładujesz skrypt. Czy jest to w większości bezpieczne? – Cristian

+0

Znalazłem przykład, w którym to może nie działać. Na przykład w Backbone.history, odniesienie 'history.pushState' jest kopiowane do' Backbone.history.pushState'. Jeśli zastąpimy odniesienie dla 'window.history.pushState' używając' = 'assignment to nadal będziesz miał' Backbone.history.pushState' odwołując się do starego 'pushState', dlatego twój kod łatek małpy nie jest wywoływany. Jeśli tylko JS ma wbudowane zarządzanie odniesieniami :( – Cristian

Powiązane problemy