Єдиний спосіб насправді зробити це (і як це робить «дійсно простою історією») - це встановити інтервал, який продовжує перевіряти поточний хеш, і порівнюючи його з тим, що було раніше, ми робимо це і дозволяємо абонентам підписатися на змінене подія, яку ми запускаємо, якщо хеш змінюється .. його не ідеально, але браузери справді не підтримують цю подію.
Оновіть, щоб ця відповідь була свіжою:
Якщо ви використовуєте jQuery (що сьогодні для більшості має бути дещо фундаментальним), то приємним рішенням є використання абстракції, яку дає вам jQuery, використовуючи систему подій для прослуховування подій хеш-зміни на об’єкт вікна.
$(window).on('hashchange', function() {
//.. work ..
});
Приємно, що ви можете написати код, який не потребує навіть турбуватися про підтримку хеш-обміну, проте вам НЕ потрібно робити магію, у вигляді дещо менш відомої функції jQuery особливих подій jQuery .
Завдяки цій функції ви, по суті, отримуєте запустити деякий код налаштування будь-якої події, коли перший раз хтось намагається використати подію будь-яким способом (наприклад, прив'язкою до події).
У цьому коді налаштування ви можете перевірити підтримку нативної веб-переглядача, і якщо браузер не реалізує це, ви можете встановити один таймер для опитування змін та запустити подію jQuery.
Це повністю скасовує ваш код від необхідності розуміння цієї проблеми підтримки, реалізація спеціальної подібної події є тривіальною (щоб отримати просту 98% працюючу версію), але навіщо це робити, коли хтось уже має .