Ich benutze:
$(window).bind( 'hashchange', function(e) { });
um eine Funktion an das Hash-Änderungsereignis zu binden. Dies scheint in IE8, Firefox und Chrome zu funktionieren, aber nicht in Safari, und ich gehe davon aus, dass dies nicht in früheren Versionen von IE der Fall ist. Für diese Browser möchte ich meinen JavaScript-Code deaktivieren, der den Hash und das hashchange
Ereignis verwendet.
Gibt es eine Möglichkeit mit jQuery, die ich erkennen kann, ob der Browser das hashchange
Ereignis unterstützt ? Vielleicht etwas mit jQuery.support
...
javascript
jquery
hashchange
browser-state
Ian Herbert
quelle
quelle
Antworten:
Sie können feststellen, ob der Browser das Ereignis unterstützt, indem Sie:
Siehe auch:
onhashchange
ohne setIntervalwindow.onhashchange
quelle
Eine aktualisierte Antwort hier ab 2017, falls jemand sie benötigt, ist, dass
onhashchange
sie in allen gängigen Browsern gut unterstützt wird. Siehe caniuse für Details. Um es mit jQuery zu verwenden, wird kein Plugin benötigt:Gelegentlich stoße ich auf Legacy-Systeme, in denen noch Hashbang-URLs verwendet werden, und dies ist hilfreich. Wenn Sie etwas Neues erstellen und Hash-Links verwenden, empfehlen wir Ihnen dringend, stattdessen die HTML5-PushState-API zu verwenden.
quelle
window.location.hash
um auf den aktuellen Hash zuzugreifen.Es gibt ein Hashchange-Plug-In, das die hier verfügbaren Funktionen und browserübergreifenden Probleme zusammenfasst .
quelle
Eine andere Herangehensweise an Ihr Problem ...
Es gibt drei Möglichkeiten, das Hashchange-Ereignis an eine Methode zu binden:
Oder
Oder
Diese funktionieren alle mit IE 9, FF 5, Safari 5 und Chrome 12 unter Win 7.
quelle
Probieren Sie die offizielle Mozilla-Website aus: https://developer.mozilla.org/en/DOM/window.onhashchange
zitiere wie folgt:
quelle
Ich bin gerade auf das gleiche Problem gestoßen (fehlendes Hashchange-Ereignis in IE7). Eine für meine Zwecke geeignete Problemumgehung bestand darin, das Klickereignis der Hash-ändernden Links zu binden.
quelle
$('a[href^="#"]')
, um Links zuhref
s zu erhalten, die mit einem Hash beginnen, ohne die Notwendigkeit eines Klassenzusatzes zu vermeidenBeachten Sie, dass im Fall von IE 7 und IE 9 die Angabe true für ("onhashchange" in Windows) ergibt, window.onhashchange jedoch niemals ausgelöst wird. Daher ist es besser, Hash zu speichern und alle 100 Millisekunden zu überprüfen, ob es geändert wurde oder nicht für alle Versionen von IE.
quelle
Was ist mit einer anderen Methode anstelle des Hash-Ereignisses und hören Sie Popstate wie.
Diese Methode funktioniert gut in den meisten Browsern, die ich bisher ausprobiert habe.
quelle
Dieses winzige jQuery-Plugin ist sehr einfach zu verwenden: https://github.com/finnlabs/jquery.observehashchange/
quelle
Ich denke, Chris Coyier hat eine Lösung für dieses Hashing-Problem. Schauen Sie sich seinen Screencast an:
Best Practices mit dynamischen Inhalten
quelle
Verwenden Sie Modernizr zur Erkennung von Funktionsfunktionen. Im Allgemeinen bietet jQuery die Erkennung von Browserfunktionen an: http://api.jquery.com/jQuery.support/ . Hashchange ist jedoch nicht auf der Liste.
Das Wiki von Modernizr bietet eine Liste von Bibliotheken, mit denen Sie alten Browsern HTML5-Funktionen hinzufügen können. Die Liste für Hashchange enthält einen Zeiger auf die HTML5- Verlaufs- API des Projekts , die anscheinend die Funktionalität bietet, die Sie benötigen würden, wenn Sie das Verhalten in alten Browsern emulieren möchten.
quelle
Hier ist die aktualisierte Version von @ johnny.rodgers
Hoffnung hilft jemandem.
quelle