URL bağlantısındaki herhangi bir değişiklikte yürütülecek JavaScript geri arama kodunu nasıl yazabilirim?
Örnek için http://example.com#a
içinhttp://example.com#b
URL bağlantısındaki herhangi bir değişiklikte yürütülecek JavaScript geri arama kodunu nasıl yazabilirim?
Örnek için http://example.com#a
içinhttp://example.com#b
Yanıtlar:
Google Özel Arama Motorları, karmayı önceki bir değere göre kontrol etmek için bir zamanlayıcı kullanırken, ayrı bir alandaki alt iframe, iframe belgesinin gövdesinin boyutunu içerecek şekilde üst öğenin konum karmasını günceller. Zamanlayıcı değişikliği yakaladığında, üst öğe, kaydırma çubuklarının görüntülenmemesi için iframe'i gövdeninkiyle eşleşecek şekilde yeniden boyutlandırabilir.
Aşağıdakine benzer bir şey aynı şeyi başarır:
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 ve Internet Explorer 8'in tümühashchange
etkinliği destekler :
if ("onhashchange" in window) // does the browser support the hashchange event?
window.onhashchange = function () {
hashChanged(window.location.hash);
}
ve bir araya getirmek:
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 ayrıca hashchange olayını kontrol edecek ve gerekirse kendi eklentisini sağlayacak bir eklentiye sahiptir - http://benalman.com/projects/jquery-hashchange-plugin/ .
DÜZENLEME : Güncellenmiş tarayıcı desteği (tekrar).
hashChange
üzerinde window
stackoverflow.com/questions/6390341/how-to-detect-url-change
hashChanged(storedHash);
hashChanged
Bu durumda, bu kodu kullanan bir geliştirici tarafından uygulanan bir işlev olması amaçlanmıştır. Buradaki cevap, yalnızca onhashchange
olayın mevcut olmadığı durumlarda değişiklik için hash'in nasıl izlenebileceğini gösterir ve evrensel bir çözüm sağlamak için olaya dayalı ve zamanlayıcı tabanlı yaklaşımları birleştirir. Demek istediğim, bağlantı kurduğunuz yanıt buradaki yanıta kesinlikle hiçbir şey eklemiyor ;-). Aynı temel bilgileri, hatta Ben Alman'ın jQuery eklentisine olan bağlantıyı sağlarlar. Tek fark, cevabımda saf bir JS çözümü sağlamamdır.
addEventListener
Üzerine yazmak yerine kullanmanızı tavsiye ederim window.onhashchange
, aksi takdirde diğer eklentiler için etkinliği engelleyeceksiniz.
window.addEventListener('hashchange', function() {
...
})
Bugünün küresel tarayıcı kullanımına bakıldığında, artık bir geri dönüşe gerek yoktur.
setInterval()
şimdilik sadece evrensel bir çözüm. Ancak gelecekte hashchange olayı şeklinde bir miktar ışık var
Bundan daha fazla bilgi alabilirsiniz
Mutasyon olay modülü, öznitelik ve metin değişiklikleri de dahil olmak üzere bir belgenin yapısındaki herhangi bir değişikliğin bildirimine izin verecek şekilde tasarlanmıştır.
var storedHash = window.location.hash;
araya getirme özet bloğuna ekleyin . Btw: Bugünlerde buna polyfill deniyor sanırım.