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
quelle
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
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).
var storedHash = window.location.hash;
den zusammenfassenden Zusammenfassungsblock hinzu. Übrigens: Heutzutage nennt man das Polyfill, denke ich.hashChange
aufwindow
stackoverflow.com/questions/6390341/how-to-detect-url-changehashChanged(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 dasonhashchange
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-Ereignissesquelle
onhashchange
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.
quelle
Ich würde empfehlen,
addEventListener
anstatt zu überschreiben, zu verwendenwindow.onhashchange
, sonst blockieren Sie das Ereignis für andere Plugins.Angesichts der heutigen globalen Browsernutzung ist ein Fallback nicht mehr erforderlich.
quelle
(Nur zur Veranschaulichung.) Das synthetische Ereignis "Hashchange" von YUI3 macht mehr oder weniger dasselbe wie die akzeptierte Antwort
quelle
Hier können Sie weitere Informationen erhalten
Mutationsereignistypen
quelle