我的网站刚刚在Backbone.js中实现了pushstate,而整个网站都因IE而中断。如何为IE创建后备广告?
我要达到的目的
主网址:http://mydomain.com/explore
另一个网址:'http://mydomain.com/explore/1234
该站点的主页是http://mydomain.com/explore
,它会触发路由器功能explore
。
当用户访问http://mydomain.com/explore/1234
时,Backbone的路由器将触发功能viewListing
,该功能与explore
功能相同,但还会包含项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
禁用推送状态。但是,要使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
网址,则必须重定向到http://mydomain.com/#explore
,因此Backbone将以它开头。
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',
}
关于javascript - Backbone.js PushStates : Fallback for Internet Explorer not working,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13253696/