2013-01-01 19 views
8

Mam problem z „popstate” obsługi zdarzeń, to jest mój kod:popstate obsługi zdarzeń wydaje się nie działać

window.addEventListener("popstate", function (event){ 
    if (event.state) { 
     alert('abc') 
    } 
}); 

// The data object is arbitrary and is passed with the popstate event. 
var dataObject = { 
    createdAt: '2011-10-10', 
    author: 'donnamoss' 
}; 

var url = '/posts/new-url'; 
history.pushState(dataObject, document.title, url); 

Spodziewałem ten kod pojawi się okno ostrzeżenia, gdy jest wykonywany, ale , nic się nie dzieje.

Czy coś jest nie tak?

Dziękuję.

+0

Testowanie kodu w [jsFiddle] (http://jsfiddle.net/DJDavid98/Lrf62/) zdarzenie '.pushState()' wydaje się nie działać. Zastąpienie zmiennych ciągami pozwoliło mi wystrzelić to wydarzenie. – SeinopSys

+0

@ DJDavid98 - To oznacza tylko, że 'pushState' zwraca' false' lub 'undefined'. –

Odpowiedz

14

pushState nie wywoła zdarzenie popstate tylko kliknąć przycisk wstecz/do przodu (lub użyć Backspace) lub wywoływanie history.back()/history.go(n) spowodowałoby to wydarzenie.

Ponadto, w przeglądarkach Webkit, zdarzenie popstate zostanie wywołane po zdarzeniu strony onload, ale Firefox i IE nie mają takiego zachowania.

+1

Zdarzenie popstate, o którym wspomniano wcześniej, jest wyzwalane po załadowaniu strony lub wywołaniu metody 01.jpg(). W przypadku tego ostatniego obiekt zdarzenia będzie zawierać właściwość stanu , która przechowuje obiekt danych podany do historii.pushState(). Czy możesz to sprawdzić, plz, zacytowałem z aplikacji internetowej JavaScript? – petwho

+1

Przeczytałem [standardy HTML] (http://www.whatwg.org/specs/web-apps/current-work/multipage/history.html#dom-history-pushstate) i nie znalazłem żadnego kroku uruchamiającego 'popstate ' 'wydarzenie.Robiłem temat związany z historią w temacie pokrewnym yestertoday i jestem pewien, że 'pushState' nie wywoła żadnych zdarzeń' popstate'. Czy to nie dziwne, jeśli akcja ** push ** wyzwala wydarzenie ** pop **? jeśli ** push ** wyzwala ** pop **, niż pozostanie w stosie historii? nic? – otakustay

+1

Teraz pożyczyłem od mojego przyjaciela jedną książkę o aplikacji Javascript, tak, że 'pushState()' wywołałoby zdarzenie 'popstate', ale myślę, że to błąd tej książki, żaden inny zasób w sieci nie potwierdza takiego zachowania. – otakustay

4

Nie, to nie będzie,

Zgodnie MDN documentation

Zauważ, że właśnie dzwoni history.pushState() lub history.replaceState() nie wywoła popstate wydarzenie. Zdarzenie typu popstate jest wywoływane tylko przez działanie przeglądarki, takie jak kliknięcie przycisku wstecz (lub wywołanie funkcji history.back() w kodzie JavaScript).

Ponownie zgodnie this question zdarzenie popstate nie jest wyzwalany w Chrome kiedy zadzwonić pushState().

0

history.pushState() nie spowoduje wyzwolenia zdarzenia popstate z definicji.

Zdarzenie popstate jest uruchamiane w niektórych przypadkach podczas nawigacji do wpisu historii sesji.

To wydarzenie ma być wyzwalany tylko podczas nawigowania do wpisu w historii, albo przez naciśnięcie przycisku wstecz/do przodu lub history.go/back.

-1

Ty cal również podłączyć obsługi popstate oddzwonienia tak:

window.onpopstate = someCallback; 

Sprawdź więcej informacji na temat tego onpopstate WindowEventHandler here.

Powiązane problemy