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
... ??? :/
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
Ah, przepraszam. IE11. Wspomniałem tylko o nowoczesnych przeglądarkach, ale nie udało się ich w wersji IE :) – crappish