Javascript Backbone.history.start()阻止后退按钮离开页面

Javascript Backbone.history.start()阻止后退按钮离开页面,javascript,backbone.js,browser-history,Javascript,Backbone.js,Browser History,我现在在一些应用程序中遇到过这种情况,所以我想知道我是否在主干历史上做了一些错误的事情。情况是这样的 我有两页,比如说: index.html app.html 索引页面只是一个普通的、平面的HTML页面,带有指向app.HTML的链接。在应用程序页面上,调用Backbone.history.start()启动哈希状态管理,用于在应用程序页面上的两个视图之间切换,例如: app.html#search app.html#results 因此,在#搜索和#结果页面之间来回导航非常有效。没问题。

我现在在一些应用程序中遇到过这种情况,所以我想知道我是否在主干历史上做了一些错误的事情。情况是这样的

我有两页,比如说:

index.html
app.html
索引页面只是一个普通的、平面的HTML页面,带有指向
app.HTML
的链接。在应用程序页面上,调用
Backbone.history.start()
启动哈希状态管理,用于在应用程序页面上的两个视图之间切换,例如:

app.html#search
app.html#results
因此,在
#搜索
#结果
页面之间来回导航非常有效。没问题。当您尝试使用“后退”按钮返回到
index.html
时,就会出现此问题。返回索引页的路径包括在
app.html
(无散列状态)处停止,此时主干路由器尽职尽责地填写丢失的散列状态,将您返回
app.html 35; search
。再次单击“上一步”按钮将转到
app.html
,这将再次填充缺少的哈希状态。。。基本上,你现在陷入了一个循环,无法从页面返回。使用推送状态时也会发生同样的行为


这似乎是应用程序在默认页面URL上自动启动自己的路由系统的潜在常见问题。有人知道避免这种情况的好方法吗?

问题是,
app.html
本身没有做任何事情;因此,如果导航,可能会以某种方式破坏应用程序

在这种情况下,您可以做的不是将根路由重定向到另一个路由,而是将其用作默认页面:

routes: {
  "": "search",
  "results": "results"
}

谢谢,我从来没有这样想过。基本URL需要作为起点,这一点非常合理。不幸的是,我们的UX规范通常是围绕条件入口点逻辑定制的,这从根本上说是导致这个问题的原因。我准备在将来把这个问题扼杀在萌芽状态。