O IE não está acionando o popstate quando a alteração de hash acontece
Eu tenho uma página que está fazendo o roteamento no lado do cliente, usando a API de histórico e push / popstate. O que funciona bem em todos os navegadores modernos. (os mecanismos de pesquisa serão suportados pelo pré-renderizador node.js)
No entanto, recentemente me deparei com um problema em que o IE não aciona o popstate no hashchange enquanto, enquanto o pushstate com URL funciona muito bem, incluindo o IE11.
Por exemplo, assim ...
$(document).on('click', 'a', function(e) {
e.preventDefault();
History.pushState({}, '', $(this).attr('href'));
});
... que dispara corretamente ...
$(window).on('popstate', function() {
console.log('url changed');
});
De acordo com as especificações do W3C, o hashchange deve disparar popstate à medida que muda o histórico atual. No entanto, quando adiciono links de hash (<a href="#hashchange">...
), clicando no IE, nada é acionado. : /
Eu não gostaria de detectar o IE (hoje em dia existem muitos navegadores que podem cair no mesmo patamar de destruição), em vez de usar a detecção de recursos. No entanto, como a história (popstate / pushstate) funciona bem o resto, nem consigo detectar o problema na falta de push / popstate ...
if(!window.history || !window.history.pushState) { ...
... e use a alteração de hash. : /
Alguma ideia?
PS. Como um bônus, o uso de jquery.history.js (versão com jquery do history.js) com o URL da hashtag explode tudo.
http://localhost/routetest/index.html#/page1/1234
torna-se
http://localhost/page1/1234
... ??? : /