Meine Website hat nur Pushstates in Backbone.js implementiert und die gesamte Website bricht für IE. Wie sollte ich einen Fallback für IE erstellen?Backbone.js PushStates: Fallback für Internet Explorer funktioniert nicht
Was ich versuche
Haupt URL zu erreichen: http://mydomain.com/explore
Eine andere URL: 'http://mydomain.com/explore/1234
Die Hauptseite der Website ist http://mydomain.com/explore
, die die Router-Funktion explore
auslöst.
Wenn ein Benutzer besucht http://mydomain.com/explore/1234
, Routers Backbone wird die Funktion viewListing
, auslösen, die die gleiche wie Funktion ist explore
, sondern auch Details für Artikel-ID 1234
.
Backbone.js Router
// Router
var AppRouter = Backbone.Router.extend({
routes: {
'explore': 'explore',
'explore/:id': 'viewListing',
},
explore: function() {
this.listingList = new ListingCollection();
// More code here
},
viewListing: function(listing_id) {
this.featuredListingId = listing_id; // Sent along with fetch() in this.explore()
this.explore();
}
});
App = new AppRouter();
// Enable pushState for compatible browsers
var enablePushState = true;
// Disable for older browsers (IE8, IE9 etc)
var pushState = !!(enablePushState && window.history && window.history.pushState);
if(pushState) {
Backbone.history.start({
pushState: true,
root: '/'
})
} else {
Backbone.history.start({
pushState: false,
root: '/'
})
}
Problem: Wie Sie im obigen Code sehen können, habe ich versucht, pushstates mit pushState: false
zu deaktivieren, wenn es sich um ein nicht kompatiblen Browser ist.
Doch damit IE auf das zugreifen kann, was normalerweise für einen normalen Browser funktioniert (http://mydomain.com/explore
), muss IE zu http://mydomain.com/explore/#explore
gehen, was Dinge verwirrend macht! Weitere Informationen zu http://mydomain.com/explore/1234
IE muss http://mydomain.com/explore/#explore/1234
gehen
Wie soll das behoben werden?
Dank als Wurzel gesetzt, habe ich versucht, diese und leitet es (wie erwartet) von 'http: // mydomain.com/explore' zu' http://mydomain.com/#/erforschen ". "Http: // mydomain.com" ist jedoch die Begrüßungsseite und nicht die App-Seite ("http: // mydomain.com/explore") – Nyxynyx
Dann müssen Sie '/ explore /' wahrscheinlich aus Ihren Backbone-Routen entfernen , setze es als Root in 'Backbone.history.start ({root: '/ explore /'})'. –