Backbone.js:在Internet Explorer中使用pushstate实现基于斜杠的URL的解决方法



我现在把事情搞得一团糟。我更新到Backbone.js 0.9.1,更新到基于斜杠的URL,并开始使用pushstate:true。5天后,我在IE9上测试了我的应用程序,结果URL无法粘贴到他们链接的页面上。

我做了这样的事:

main.html

<a href="/signup">Do Signup</a>

浏览器转到mydomain.com/signup一秒钟,然后跳回带有URL mydomain.com/#signup的main.html。

恢复到pushstate:true确实解决了简单链路的问题,但分解了我定义路由器的路由,比如。。。

SignupRouter = Backbone.Router.extend({
  routes: {
    'signup': 'signup',
    'signup/:key': 'confirm'
  }, initialize: function() {
    // do some stuff here
  }, signup: function() {
    // signup view
  }, confirm: function() {
    // confirm view
  }
});

如果我不使用pushstate,我必须回到为每个页面创建单独路由的策略,并基于服务器端变量加载路由器(我知道这是非常原始的):

SignupRouter = Backbone.Router.extend({
  initialize: function() {
    // signup view
  }
});
ConfirmSignupRouter = Backbone.Router.extend({
  initialize: function() {
    // confirm view
  }
});

有没有一些IE友好的方法可以做到这一点(IE7~9)?服务器端的一些变通方法?任何东西

如果关闭pushState使其在不支持它的浏览器中工作,则尝试使用主干pushState测试来先发制人地关闭它(此代码基于backbone源中的_hasPushState变量):

// Enable pushState for compatible browsers
var enablePushState = true;  
// Disable for older browsers
var pushState = !!(enablePushState && window.history && window.history.pushState);
Backbone.history.start({ pushState: pushState });

相关内容

最新更新