2013-11-26 2 views
1

Я искал google и некоторые другие вопросы на этом форуме, но, похоже, на мой вопрос не ответил.javascript onpopstate альтернатива с таким же функциональным, как onhashchange

основе MDN https://developer.mozilla.org/en-US/docs/Web/API/window.onpopstate:

Обратите внимание, что просто вызов history.pushState() или history.replaceState() не вызовет popstate событие. Событие popstate запускается только с помощью действия браузера, такого как щелчок по кнопке «Назад» (или вызов history.back() в JavaScript). Событие запускается только тогда, когда пользователь перемещается между двумя записями истории для того же документа.

Im ищет onpopstate альтернативу, которая имеет тот же функционал, как window.onhashchange (https://developer.mozilla.org/en-US/docs/Web/API/Window.onhashchange), который будет срабатывать событие, когда URL изменился.

Вы хотите поделиться своим решением?

ответ

1

Я думаю, что вы, вероятно, можете использовать инструмент «History.js», который предоставляет событие «statechange», которое вы можете прослушать. Инструмент запускает это событие либо при нажатии кнопок вперед/назад, либо при использовании pushState/replaceState.

https://github.com/browserstate/history.js/

Конечно, теперь вы обменены на другую проблему, которая является то, что у вас есть событие увольняют для обоих типов действий, и вы часто хотите провести различие между ними и сложнее. Поэтому вам нужно взломать собственное решение, чтобы отличить их. Большинство людей, кажется, устанавливают какой-либо глобальный флаг, когда они собираются вызвать pushState/replaceState, а затем проверить этот флаг в обработчике событий. Если флаг установлен, событие происходит из вашего собственного кода, а если нет, то это происходит из кнопок браузера.

+0

Большое спасибо mr @ kyle-simpson, вы побывали здесь. Я не буду использовать внешнюю библиотеку, чтобы сделать простую вещь. Но вы правдивы, должны взломать мое собственное решение. Я создаю собственную версию pushState. Затем создайте функцию Router, которая будет вызываться 'onpopstate' и мой собственный pushState – plainjavascript

Смежные вопросы