Wie kann ich den JavaScript-Rückrufcode schreiben, der bei Änderungen im URL-Anker ausgeführt wird?
Zum Beispiel von http://example.com#a
bishttp://example.com#b
Wie kann ich den JavaScript-Rückrufcode schreiben, der bei Änderungen im URL-Anker ausgeführt wird?
Zum Beispiel von http://example.com#a
bishttp://example.com#b
Antworten:
Benutzerdefinierte Google-Suchmaschinen verwenden einen Timer, um den Hash mit einem vorherigen Wert zu vergleichen, während der untergeordnete Iframe in einer separaten Domain den Standort-Hash des übergeordneten Elements aktualisiert, um die Größe des Körpers des Iframe-Dokuments zu enthalten. Wenn der Timer die Änderung erfasst, kann der Elternteil den Iframe so ändern, dass er dem des Körpers entspricht, sodass keine Bildlaufleisten angezeigt werden.
So etwas erreicht Folgendes:
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 und Internet Explorer 8 alle unterstützen die hashchange
Veranstaltung:
if ("onhashchange" in window) // does the browser support the hashchange event?
window.onhashchange = function () {
hashChanged(window.location.hash);
}
und zusammensetzen:
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 hat auch ein Plugin, das nach dem Hashchange-Ereignis sucht und bei Bedarf ein eigenes bereitstellt - http://benalman.com/projects/jquery-hashchange-plugin/ .
BEARBEITEN : Aktualisierte Browserunterstützung (erneut).
hashChange
auf window
stackoverflow.com/questions/6390341/how-to-detect-url-change
hashChanged(storedHash);
hashChanged
In diesem Fall soll es sich um eine Funktion handeln, die von einem Entwickler mithilfe dieses Codes implementiert wird. Die Antwort hier zeigt nur, wie man den Hash auf Änderungen überwachen kann, bei denen das onhashchange
Ereignis nicht verfügbar ist, und kombiniert die ereignisbasierten und zeitgesteuerten Ansätze, um eine universelle Lösung bereitzustellen. Mein Punkt ist, dass die Antwort, auf die Sie verlinkt haben, der Antwort hier absolut nichts hinzufügt ;-). Sie bieten dieselben grundlegenden Informationen, sogar den Link zum jQuery-Plugin von Ben Alman. Der einzige Unterschied besteht darin, dass ich in meiner Antwort eine reine JS-Lösung angegeben habe.
setInterval()
ist vorerst nur eine universelle Lösung. Aber es gibt in Zukunft etwas Licht in Form eines Hashchange-Ereignisses
Nach dem, was ich in anderen SO-Fragen sehe, ist die einzige funktionsfähige browserübergreifende Lösung ein Timer. Schauen Sie sich zum Beispiel diese Frage an.
Ich würde empfehlen, addEventListener
anstatt zu überschreiben, zu verwenden window.onhashchange
, sonst blockieren Sie das Ereignis für andere Plugins.
window.addEventListener('hashchange', function() {
...
})
Angesichts der heutigen globalen Browsernutzung ist ein Fallback nicht mehr erforderlich.
Hier können Sie weitere Informationen erhalten
Das Mutationsereignismodul ermöglicht die Benachrichtigung über Änderungen an der Struktur eines Dokuments, einschließlich Änderungen von Attribut und Text.
var storedHash = window.location.hash;
den zusammenfassenden Zusammenfassungsblock hinzu. Übrigens: Heutzutage nennt man das Polyfill, denke ich.