Wie kann ich den JavaScript-Rückrufcode schreiben, der bei Änderungen im URL-Anker ausgeführt wird?
Zum Beispiel von http://example.com#abishttp://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#abishttp://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 hashchangeVeranstaltung:
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).
hashChangeauf window stackoverflow.com/questions/6390341/how-to-detect-url-change
hashChanged(storedHash);
hashChangedIn 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 onhashchangeEreignis 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, addEventListeneranstatt 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.