У меня есть страница, которая выполняет маршрутизацию на клиентах, используя API истории и push/popstate. Это очень хорошо работает во всех современных браузерах. (поисковые системы будут поддерживаться node.js prerenderer)
Однако я недавно столкнулся с проблемой, когда 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 wrapped version of history.js) с хэштаг-url, ударит все это.
http://localhost/routetest/index.html#/page1/1234
становится
http://localhost/page1/1234
...???:/