Отже, тепер, коли HTML5 вводить history.pushStateдля зміни історії браузерів, веб-сайти починають використовувати це у поєднанні з Ajax замість зміни ідентифікатора фрагмента URL-адреси.
На жаль, це означає, що ці дзвінки вже не можуть бути виявлені onhashchange.
Моє запитання: чи є надійний спосіб (хак?;)) Виявити, коли веб-сайт використовує history.pushState? У специфікації нічого не зазначено про порушені події (принаймні, я нічого не міг знайти).
Я спробував створити фасад і замінив window.historyвласним об’єктом JavaScript, але це взагалі не мало ефекту.
Подальше пояснення: я розробляю надбудову для Firefox, яка потребує виявлення цих змін та відповідних дій.
Я знаю, що кілька днів тому було подібне питання, яке запитувало, чи буде прослуховування якихось подій DOM ефективним, але я краще не покладаюся на це, оскільки ці події можуть бути породжені з багатьох різних причин.
Оновлення:
Ось jsfiddle (використовуйте Firefox 4 або Chrome 8), яка показує, що onpopstateвона не спрацьовує, коли pushStateвикликається (чи я щось роблю неправильно? Не соромтеся її покращувати!).
Оновлення 2:
Ще одна (побічна) проблема полягає в тому, що window.locationвона не оновлюється при використанні pushState(але я читаю про це вже тут, так я думаю).
historyоб’єкт. Це може бути непотрібним у цьому випадку.