Системы пользовательского поиска 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/.
РЕДАКТИРОВАТЬ : обновлена поддержка браузера (снова).