jquery "hashchange" läuft im IE nicht

aargau

Erfahrenes Mitglied
Ich bin dabei eine kleine Bildgalerie mit JS zu realisieren, dafür verwende ich zusätzlich das jQuery Framework.

Nun habe ich aber ein kleines Problem. Ich möchte die Galerie ohne x Anfragen an den Server lösen. Dazu lade ich einfach alle Bilder in ein JS Array und arbeite dann ohne Seitenreload damit.
Das Problem ist nun aber das man den Link auch an andere Personen weiterschicken können soll. Dazu nutze ich nun einfach die URL-Hash Funktion.
Mit
HTML:
$(window).bind(\'hashchange\', function() {showPic(returnID(window.document.location.hash)) ;})
Prüfe ich ob die URL verändert wurde. Das klappt soweit auch Problemlos ausser im InternetExplorer. Da klappt das ganze nicht...

Nun meine Frage, wie bringe ich dem IE bei das er auf die URL Änderungen reagiert?
 
Nun meine Frage, wie bringe ich dem IE bei das er auf die URL Änderungen reagiert?

Der IE < 8 untersützt dieses Event nicht (http://caniuse.com/#search=hashchange).

Hier ein Mini Plugin für dich, dass diese Lücke schließen sollte. Es pollt den hash und feuert das event bei Änderung.

Javascript:
(function() {
	if (!("onhashchange" in window)) {
		var oldHash = location.hash;

		setInterval(function() {
			if(oldHash !== location.hash) {
				oldHash = location.hash;
				$(window).trigger('hashchange');
			}
		}, 20);
	}
})();
 
Dank dir für die schnelle Antwort.

Das ganze klappt wunderbar :) Ich musste jedoch diese Zeile noch bearbeiten:
Javascript:
   if (!("onhashchange" in window)) {
gegen
Javascript:
   if (!("hashchange" in window)) {

Und schon läuft das ganze wunderbar im IE
 
Jetzt bekommst du das Event in Browsern die es unterstützen doppelt ausgelöst, weil auch der Firefox hat keine "hashchange" Eigenschaft. "onhashchange" war eigentlich korrekt.

Ich habe keinen IE parat. Wo genau hast du meinen Code hin gepackt? Er sollte unmittelbar nach dem jQuery Core kommen.
 
den Code habe ich direkt nach dem Einbinden des jquery script eingebunden un direkt darunter mein alter Code.

Interessant ist das im IE9 welcher hashchange ja unterstützen sollte das ganze auch nicht klappt. hingegen wenn ich es gegen "hashchange" ersetze klappt es eben da auch, nur dann eben in anderen Browsern doppelt...
 
hingegen wenn ich es gegen "hashchange" ersetze klappt es eben da auch, nur dann eben in anderen Browsern doppelt...

Naja, "if(!('hashchange') in window)" ist so gut wie "if(false)", deshalb hat das mit dem umbenennen nur bedingt was zu tun. Das sollte so eigentlich funktionieren http://stackoverflow.com/questions/4030390/javascript-onhashchange-test#answer-4030510

Ich habe hier mal nach geguckt (man nennt so was polyfill) https://github.com/Modernizr/Modernizr/wiki/HTML5-Cross-Browser-Polyfills

Ich empfehle das Plugin, weil mir der Autor bekannt ist: http://benalman.com/projects/jquery-hashchange-plugin/

Sein Kommentar im Code sagt

// Does the browser support window.onhashchange? Note that IE8 running in
// IE7 compatibility mode reports true for 'onhashchange' in window, even
// though the event isn't supported, so also test document.documentMode.
doc_mode = doc.documentMode,
supports_onhashchange = 'on' + str_hashchange in window && ( doc_mode === undefined || doc_mode > 7 );

Also erklärt das das Verhalten.
 
Das Plugin von benalman scheint die Lösung zu sein. Klappt so nun im IE Problemlos.

Vielen Dank und schöne Festtage!
 

Neue Beiträge

Zurück