Backbone.js Ursache Fehler nur im IE7
Ich bin die Entwicklung einer web-app mit CodeIgniter auf back-end-und Backbone.js auf front-end.
Ich bin auch mit HTML5 Boilerplate, wie mein start-Vorlage.
Ich bin mit Rückgrat Controller und Geschichte als Haupt-navigation durch meine Anwendung. Ich habe es einmal gemacht in der Vergangenheit und alles funktioniert Prima. Das problem ist, wenn ich starten hashchange event capture mit Rückgrat.Geschichte.start() und klicken Sie auf einen link example.com/#home der hash ändern Sie in der url, das Ereignis ausgelöst wird, aber 2 Sekunden nach, wird der hash gelöscht von url und ein javascript-Fehler werfen, nur im ie7.
Habe ich einen Blick auf source-code und hashchange event ist erreicht, im IE7 durch das erstellen eines IFRAME läuft ein Intervall zu überprüfen hash-Wert ändern.
Jemand hatte dieses komische Fehler vor und wissen, wie man dieses Problem lösen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den richtigen Weg zu handle ein #hash-base-Applikation mit Backbone scheint Rückgrat.Geschichte.saveLocation( hash ) und nach dem Rückgrat.Geschichte.loadUrl() zu aktivieren, Controller routing.
Doch ich wusste, dass dies vor...
Haben Sie Spaß mit diesem atemberaubenden MVC-Bibliothek 🙂
Backbone.history.start()
korrekt funktioniert, außer für IE7. Es scheint, dass IE7 nicht auslösenhashchange
Veranstaltung. In meinem Fall habe ichModernizr.hashchange
zuerst zu überprüfen, ob es unterstützt wird. Wenn nicht, werde ich verwenden.saveLocation()
und.loadUrl()
.Die Lösung, die ich gefunden habe zu arbeiten, war der Einsatz von Ben Alman ist hashchange-plugin. Gehen Sie auf die start-Funktion im Rückgrat.Geschichte und ersetzen Sie den code, der die Funktion start mit diesem.
Und sicher sein, um die hashchange-plugin-Datei in Ihrem code.
Klick auf einen hash-URL eigentlich nicht speichern, eine history-Eintrag im IE -- verwenden Rückgrat ist
saveLocation
Funktion löschen Sie eine Markierung von einem Ort, den Sie möchten in der Lage sein, um zurück zu gehen. Für die volle Schaufel finden Sie unter:http://documentcloud.github.com/backbone/#Controller-saveLocation
SCRIPT1014: Invalid character javascript:0,line 1 character 2;
die scheinen mit IE unsichtbaren IFRAME. Irgendwelche Ideen wie man es beheben?Fand ich eine Lösung für dieses problem von Jon Leighton in den offiziellen Ausgabe-Liste: https://github.com/documentcloud/backbone/issues/228
Bis ein offizieller patch hinzufügen backbone.js (Linie 689 in Backbone-0.3.3)
nach der folgenden Zeile:
this.iframe = $('iframe src="javascript:0" tabindex="-1" ').hide().appendTo('body')[0].contentWindow;
(Ich konnte nicht schreiben das komplette i-frame-tag < & /> - es ist nicht hier erlaubt :))