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

vik*_*tra 4 internet-explorer backbone.js pushstate

我现在把事情弄得一团糟.我更新到Backbone.js 0.9.1,更新为基于斜杠的URL并开始使用pushstate:true.5天后,我在IE9上测试我的应用程序,并且URL不会粘在他们链接到的页面上.

我做了这样的事情:

main.html中

<a href="/signup">Do Signup</a>
Run Code Online (Sandbox Code Playgroud)

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

恢复到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
  }
});
Run Code Online (Sandbox Code Playgroud)

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

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

ConfirmSignupRouter = Backbone.Router.extend({
  initialize: function() {
    // confirm view
  }
});
Run Code Online (Sandbox Code Playgroud)

是否有一些IE友好的方式(IE7~9)?服务器端的一些解决方法?什么?

小智 7

如果关闭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 });
Run Code Online (Sandbox Code Playgroud)