2012-11-06 22 views
6

我的網站剛剛在Backbone.js中實現了pushstates,並且整個網站都停止了IE。我應該如何爲IE創建一個回退?Backbone.js PushStates:Internet Explorer不能正常工作

我想實現

主要網址:http://mydomain.com/explore

另一個網址:'http://mydomain.com/explore/1234

該網站的主頁是http://mydomain.com/explore觸發路由器功能explore

當用戶訪問http://mydomain.com/explore/1234,骨幹路由器將觸發功能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禁用pushstates如果它是不兼容的瀏覽器。

但是,IE瀏覽器訪問正常的瀏覽器(http://mydomain.com/explore)通常工作,IE瀏覽器將需要去http://mydomain.com/explore/#explore這是讓事情混亂!更多訪問http://mydomain.com/explore/1234 IE需要去http://mydomain.com/explore/#explore/1234

這應該如何解決?

回答

2

如果你不想要http://mydomain.com/explore/#explore的網址,那麼你必須重定向到 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', 
} 
+0

由於設定爲根,我嘗試這樣做,它重定向(如預期)從'的http:// mydomain.com/explore'到'http://mydomain.com/#/explore'。然而,'http:// mydomain.com'是歡迎/啓動頁面,而不是應用程序頁面('http:// mydomain.com/explore') – Nyxynyx

+0

然後你可能不得不從你的Backbone路線中刪除'/ explore /' ,將其設置爲Backbone.history.start({root:'/ explore /'})'中的根。 –