Отже, тепер, коли 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
об’єкт. Це може бути непотрібним у цьому випадку.