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
... ??? : /