2014-05-02 15 views
10

Mam stronę, która wykonuje routing po stronie klienta, przy użyciu historii API & push/popstate. Co działa dobrze we wszystkich nowoczesnych przeglądarkach. (Wyszukiwarki będą obsługiwane przez node.js prerenderer)IE nie wypalanie popstate gdy zamienia się dzieje

Jednak ostatnio wpadłem na problem, gdzie IE nie uruchamia popstate na haszyszu, podczas gdy pststate z adresami URL działa dobrze, w tym IE11.

Na przykład coś tak ...

$(document).on('click', 'a', function(e) { 
    e.preventDefault(); 
    History.pushState({}, '', $(this).attr('href')); 
}); 

... co właściwie pożary ...

$(window).on('popstate', function() { 
    console.log('url changed'); 
}); 

Według spec W3C The hashchange powinien odpalić popstate jak to się zmienia prąd historia. Jednak po dodaniu linków hash (<a href="#hashchange">...), klikając to na IE, nic nie strzela. :/

Nie chciałbym robić wykrywania IE (ponieważ obecnie jest tak wiele przeglądarek, które mogą wpaść w ten sam dół zagłady), zamiast korzystać z wykrywania funkcji. Jednak, jak historia (popstate/pushState) działa dobrze na resztę drogi nie mogę nawet wykrycia problemu brakujących Push/popstate ...

if(!window.history || !window.history.pushState) { ... 

... i zamiast używać hashchange. :/

Jakieś myśli?

PS. Jako bonus, użycie jquery.history.js (jquery zawijane w wersji history.js) z hashtagiem dmucha całość.

http://localhost/routetest/index.html#/page1/1234 

staje

http://localhost/page1/1234 

... ??? :/

+0

Jaka wersja IE masz wgląd w? Pojawia się problem z 'pushState()' dla IE 9. Spójrz na to pytanie z dostarczoną odpowiedzią: http: // stackoverflow.com/questions/3722815/does-internet-explorer-support-pushstate-and-replestate – urbz

+1

Ah, przepraszam. IE11. Wspomniałem tylko o nowoczesnych przeglądarkach, ale nie udało się ich w wersji IE :) – crappish

Odpowiedz

1

Jest to znany problem w IE11 i wszystkie przeglądarki Internet Explorer przed Edge.

Zobacz ten link https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/3740423/. Odpowiedź Microsoftu jest ostatnim postem w tym raporcie o wydaniu, i odnotowuje najnowszą wersję, która działa.

Wszystkie wersje IE będą wyświetlać to zachowanie, a hakowanie/poprawianie małpy poprawnego zachowania z powrotem do struktury zdarzeń jest prawdopodobnie jedynym sposobem, aby to działało niezawodnie. Oznacza to, że prawdopodobnie będziesz potrzebować specjalnej logiki IE, jeśli chcesz ją wdrożyć samodzielnie.

0

W IE 10 i 11 zdarzenie popstate zostanie wywołane tylko dla elementu historii po ustawieniu stanu z opcją history.pushState lub replaceState, w tym gdy jest ustawione na NULL i tylko podczas przechodzenia między dwoma elementami, które mają miał ustawiony stan. Dlatego konieczne jest ustawienie stanu dla nowego elementu historii w haszymowaniu. Po ustawieniu stanu zdarzenie popstate zostanie uruchomione, gdy użytkownik przejdzie przez historię przeglądarki.

https://developer.mozilla.org/en-US/docs/Web/API/History

Powiązane problemy