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

... ??? : /

questionAnswers(3)

yourAnswerToTheQuestion