Единственный способ действительно сделать это (и как «настоящая история» делает это), это установить интервал, который продолжает проверять текущий хеш, и сравнивать его с тем, что было раньше, мы делаем это и позволяем подписчикам подписываться на измененный событие, которое мы запускаем, если хэш изменяется .. его не идеально, но браузеры действительно не поддерживают это событие изначально.
Обновите, чтобы сохранить этот ответ свежим:
Если вы используете jQuery (который сегодня должен быть несколько основополагающим для большинства), то хорошим решением будет использование абстракции, которую дает вам jQuery, используя свою систему событий для прослушивания событий hashchange в объекте window.
$(window).on('hashchange', function() {
//.. work ..
});
Здесь хорошо то, что вы можете писать код, который даже не должен беспокоиться о поддержке хеширования, однако вам НЕОБХОДИМО сделать некоторую магию в виде несколько менее известной функции jQuery специальных событий jQuery .
С помощью этой функции вы, по сути, получаете возможность запускать некоторый установочный код для любого события, когда кто-то впервые пытается использовать событие каким-либо образом (например, привязку к событию).
В этом коде настройки вы можете проверить поддержку встроенного браузера, а если браузер не реализует его изначально, вы можете настроить один таймер для запроса изменений и вызвать событие jQuery.
Это полностью освобождает ваш код от необходимости понимать эту проблему поддержки, реализация специального события такого рода тривиальна (чтобы получить простую 98% рабочую версию), но зачем это делать, когда кто-то уже это сделал .