Javascript Backbone.js PushState:Internet Explorer不工作的回退

Javascript Backbone.js PushState:Internet Explorer不工作的回退,javascript,jquery,backbone.js,underscore.js,pushstate,Javascript,Jquery,Backbone.js,Underscore.js,Pushstate,我的站点刚刚在Backbone.js中实现了pushstates,整个站点都中断了IE。我应该如何为IE创建一个后备 我正在努力实现的目标 主URL:http://mydomain.com/explore 另一个URL:'http://mydomain.com/explore/1234 该网站的主页是http://mydomain.com/explore这会触发路由器功能浏览 当用户访问http://mydomain.com/explore/1234,主干网路由器将触发功能查看列表,该功能与功能

我的站点刚刚在Backbone.js中实现了pushstates,整个站点都中断了IE。我应该如何为IE创建一个后备

我正在努力实现的目标

主URL:
http://mydomain.com/explore

另一个URL:
'http://mydomain.com/explore/1234

该网站的主页是
http://mydomain.com/explore
这会触发路由器功能
浏览

当用户访问
http://mydomain.com/explore/1234
,主干网路由器将触发功能
查看列表
,该功能与功能
浏览
相同,但还包括项目id
1234
的详细信息

Backbone.js路由器

// 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: '/'
    })
}
问题:正如您在上面的代码中看到的,如果是不兼容的浏览器,我尝试使用
pushState:false禁用pushstates

但是IE访问正常浏览器正常工作的内容(
http://mydomain.com/explore
),IE需要转到
http://mydomain.com/explore/#explore
这让事情变得扑朔迷离!更多信息,请访问
http://mydomain.com/explore/1234
IE需要转到
http://mydomain.com/explore/#explore/1234


如何解决这个问题?

如果您不想
http://mydomain.com/explore/#explore
url,然后您必须重定向到
http://mydomain.com/#explore
因此主干将从它开始

if(!pushState && window.location.pathname != "/") {
  window.location.replace("/#" + window.location.pathname)
}
UPD:将path设置为哈希
窗口.location.pathname.substr(1)

UPD2:如果希望
/explore/
成为主干路由的根,则必须将其从路由中排除,并在
历史记录中设置为根。开始({root://explore/“})


谢谢,我试过了,它从
http://mydomain.com/explore
http://mydomain.com/#/explore
。然而
http://mydomain.com
是欢迎/启动页面,而不是应用程序页面(
http://mydomain.com/explore
)然后您可能必须从主干路由中删除
/explore/
,在
主干.history.start({root:'/explore/'})中将其设置为根。
routes: {
    '': 'explore',
    ':id': 'viewListing',
}