IE не запускает popstate, когда происходит hashchange

У меня есть страница, которая выполняет маршрутизацию на стороне клиента, используя API истории и push / popstate. Который прекрасно работает во всех современных браузерах. (поисковые системы будут поддерживаться prerenderer node.js)

Однако недавно я столкнулся с проблемой, когда IE не запускает popstate на hashchange, в то время как pushstate с URL-адресами работает очень хорошо, включая IE11.

Например, вот так ...

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

... который правильно срабатывает ...

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

Согласно спецификации W3C, hashchange должен запускать popstate, так как он меняет текущую историю. Тем не менее, когда я добавляю в хэш-ссылки (<a href="#hashchange">...), нажимая на IE, ничего не срабатывает. : /

Я не хотел бы делать IE-обнаружение (поскольку в настоящее время существует так много браузеров, которые могут попасть в одну и ту же яму), вместо того, чтобы использовать обнаружение функций. Однако, так как история (popstate / pushstate) работает отлично, я даже не могу обнаружить проблему с отсутствующим push / popstate ...

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

... и использовать вместо этого hashchange. : /

Какие-нибудь мысли?

PS. В качестве бонуса, использование jquery.history.js (обернутая в jquery версия history.js) с URL-адресом хэштега уничтожает все это.

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

становится

http://localhost/page1/1234

... ??? : /

Ответы на вопрос(3)

Ваш ответ на вопрос