Позвоночник.JS PushStates: запасной вариант для Internet Explorer не работает



Мой сайт только что реализовал pushstates в Backbone.js и весь сайт ломается для IE. Как создать запасной вариант для IE?



Чего я пытаюсь достичь



Основной URL: http://mydomain.com/explore



Другой URL: 'http://mydomain.com/explore/1234



Главной страницей сайта является http://mydomain.com/explore, которая запускает функцию маршрутизатора explore.



Когда пользователь посещает http://mydomain.com/explore/1234, маршрутизатор магистрали запускает функцию viewListing, которая является такой же, как функция explore, но также включает детали для идентификатора элемента 1234.



Позвоночник.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: '/'
})
}


Проблема: Как вы можете видеть в приведенном выше коде, я попытался отключить pushstates с помощью pushState: false, если это несовместимый браузер.



Однако для IE, чтобы получить доступ к тому, что обычно работает для обычного браузера (http://mydomain.com/explore), IE нужно будет перейти к http://mydomain.com/explore/#explore, что делает вещи запутанными! Далее еще для доступа к http://mydomain.com/explore/1234 IE нужно перейти к http://mydomain.com/explore/#explore/1234



Как это должно быть исправлено?

571   1  

1 ответ:

Если вы не хотите http://mydomain.com/explore/#explore url, то вы должны перенаправить на http://mydomain.com/#explore Так что вместо этого мы начнем с него.

if(!pushState && window.location.pathname != "/") {
  window.location.replace("/#" + window.location.pathname)
}

UPD: вероятно, вам придется удалить начальную косую черту при установке пути в качестве хэша window.location.pathname.substr(1)

UPD2: если вы хотите, чтобы /explore/ был корнем для ваших магистральных маршрутов, то вы должны исключить его из маршрутов и установить в качестве корня в History.start({root: "/explore/"})

routes: {
    '': 'explore',
    ':id': 'viewListing',
}

Comments

    Ничего не найдено.