Существует ли обработчик изменения URL-адреса для приложения HTML5 AJAX (например, обработчик hashchange для HTML4)

Я использую для прослушивания события обработчика hashchange. Но теперь с HTML5 вы можете изменить URL без использования хеша. Как добавить слушателя к изменениям URL?

1 ответ

Решение

Хеш -изменения могут произойти даже без использования JS. Как и поведение по умолчанию щелчка ссылки привязки, может вызвать изменение хеша.

Объект истории HTML5 может управляться только через JS. Для этого есть pushState() и replaceState (). После того, как браузер вернется назад и вперёд, он вызовет событие popstate. Я не знаю других обработчиков событий для истории HTML5.

$(window).bind("popstate", function() {
    console.log(window.location.href);
});

Если вам требуется триггер всякий раз, когда что-то выдвигает состояния к объекту истории, вы должны полагаться на того, кто вызывает его, чтобы позволить наблюдателям (обратным вызовам) для него.

В противном случае вы можете попробовать что-то не очень надежное:

function onPushState(callback) {
    (function(pushState) {
       history.pushState = function() {
           pushState.apply(this, arguments);
           callback.apply(window, arguments);
       };
    })(history.pushState);
}

onPushState(function() {
    console.log(window.location.href);
});

http://jsfiddle.net/Cxjey

Вы можете сделать то же самое для замены состояния.

Опять же, это не может быть хорошей идеей, так как вы меняете поведение браузера по умолчанию.

Другие вопросы по тегам