2012-05-02 3 views
6

Мой Google-фу ничего не подтягивает.Есть ли обратный вызов для History.pushstate?

Когда вы сделаете это:

var stateObj = { state: "some state" }; 
history.pushState(stateObj, "page 2", "other.htm"); 

Есть ли связанное окно обратного вызова?

Я знаю, что это:

window.onpopstate = function() { 

} 

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

Существует ли глобальный обратный вызов для изменения URL-адреса в любое время?

+0

http://stackoverflow.com/questions/680785/on-window-location-hash-change – Joe

+0

Попробуйте привязать его к элементу, а затем проверьте значение typeof (typeof elem.onpopstate), если оно не определено, оно не поддерживается , если это функция все хорошо. http://perfectionkills.com/detecting-event-support-without-browser-sniffing/ для – GillesC

+2

Возможный дубликат [Как получить уведомление об изменениях истории через history.pushState?] (http: // stackoverflow. com/questions/4570093/how-to-get-notified-about-changes-of-the-history-through-history-pushstate) – thekevinscott

ответ

12

Нет, нет onpushstate или что-то еще. Тем не менее, небольшое исправление обезьяны может исправить это:

var pushState = history.pushState; 
history.pushState = function() { 
    pushState.apply(history, arguments); 
    fireEvents('pushState', arguments); // Some event-handling function 
}; 

Это будет уведомлять вас только о том, когда используется pushState. Вероятно, вы захотите сделать что-то подобное для replaceState.

Если вам необходимо получить уведомление о том, что URL-адрес вообще изменится, некоторые комбинации вышеперечисленного и обработчик hashchange доставят вам большую часть пути.

+1

Что вы знаете, [это] (http://stackoverflow.com/questions/4570093/how- вопрос «получать-уведомлять-о-изменениях-истории-через-историю-путаст») почти идентичен, и поэтому ответ. : P –

+0

Можете ли вы получить какие-либо проблемы? Например. делая это на стороннем веб-сайте, где вы загружаете скрипт. Или это в основном безопасно? – Cristian

+0

Я нашел пример, где это может не сработать. Например, в Backbone.history ссылка 'history.pushState' копируется в' Backbone.history.pushState'. Если мы заменим ссылку для 'window.history.pushState', используя' = 'назначение, вы все равно будете иметь« Backbone.history.pushState », ссылаясь на старый' pushState', поэтому ваш код патча обезьяны не вызывается. Если бы у JS было встроенное справочное руководство :( – Cristian

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