Как я могу написать код обратного вызова JavaScript, который будет выполнен на каких-либо изменениях в привязке к URL?
Например, от http://example.com#a
кому: http://example.com#b
Системы пользовательского поиска Google используют таймер для проверки хэша на соответствие предыдущему значению, в то время как дочерний iframe в отдельном домене обновляет хэш местоположения родителя, чтобы он содержал размер тела документа iframe. Когда таймер улавливает изменение, родительский элемент может изменить размер iframe в соответствии с размером тела, чтобы полосы прокрутки не отображались.
Примерно следующее:
var storedHash = window.location.hash;
window.setInterval(function () {
if (window.location.hash != storedHash) {
storedHash = window.location.hash;
hashChanged(storedHash);
}
}, 100); // Google uses 100ms intervals I think, might be lower
Google Chrome 5, Safari 5, Opera 10.60 , Firefox 3.6 и Internet Explorer 8 все поддерживает событие hashchange
:
if ("onhashchange" in window) // does the browser support the hashchange event?
window.onhashchange = function () {
hashChanged(window.location.hash);
}
и объединяет его:
if ("onhashchange" in window) { // event supported?
window.onhashchange = function () {
hashChanged(window.location.hash);
}
}
else { // event not supported:
var storedHash = window.location.hash;
window.setInterval(function () {
if (window.location.hash != storedHash) {
storedHash = window.location.hash;
hashChanged(storedHash);
}
}, 100);
}
jQuery также имеет плагин, который проверяет наличие события hashchange и при необходимости предоставляет свое собственное - http: // benalman.com/projects/jquery-hashchange-plugin/.
РЕДАКТИРОВАТЬ : Обновлена поддержка браузера (снова).
Вы можете получить больше информации из этой
Модуль события мутации разработан Разрешить уведомление о любых изменениях к структуре документа, в том числе привлечения и модификации текста.
Из того, что я вижу в других настолько вопросы, единственное работоспособное решение для перекрестного браузера является таймером. Проверьте этот вопрос , например.
SetInterval ()
- только универсальное решение. Но в будущем есть свет в форме события Hashchange