【问题标题】:Ember.js router pushing extra state in Firefox and IE but not in ChromeEmber.js 路由器在 Firefox 和 IE 中推送额外状态,但在 Chrome 中没有
【发布时间】:2012-11-13 01:35:49
【问题描述】:

鉴于此 Ember.js 应用程序的基本路由器定义直接取自此处的 Ember API 文档:http://emberjs.com/api/classes/Ember.Router.html

App = Ember.Application.create({
  Router: Ember.Router.extend({
    root: Ember.Route.extend({
      index: Ember.Route.extend({
        route: '/'
      }),
      ... additional Ember.Routes ...
    })
  })
});

这将在 chrome 中生成以下网址:

本地主机/

但在 Firefox 和 IE 中产生:

本地主机/#

它不仅在末尾添加了 hash bang,而且后退按钮在 Firefox 和 IE 中都有历史记录:

本地主机/

但是这个“状态”不能被刷新。刷新将再次带您到:

本地主机/#

这似乎是路由器以某种方式推动了 2 个状态,但其中一个并不是真正有效的。 有人可以解释一下我在这里缺少什么吗?

【问题讨论】:

    标签: ember.js ember-old-router


    【解决方案1】:

    默认情况下,Ember 应用程序在路由中有 #。我不确定您为什么会出现不一致,但是为了告诉路由器不要在 url 中使用 # 您可以设置“位置”选项:

    App.Router = Ember.Router.extend({
      location: 'history'
    });
    

    这里是文档中引用 location 属性的地方:http://emberjs.com/api/classes/Ember.Router.html#property_location

    【讨论】:

    • # 不是我的问题。我可以忍受它。我的问题是浏览器中有没有# 的url 的实际历史记录,即使那不是“可重新加载”状态。 Firefox 和 IE 都看到 2 个 url:/ 和 /#
    • 如果您将“历史”标志添加到路由器是否可以解决问题(或者您是否需要有一个“#”)?我的想法是,如果你告诉 Ember 不要使用 # 那么它可能只设置一个而不是两个 URL。
    • 通过设置 location = "history" 将路由器设置为使用浏览器的 history.pushstate API,确实可以解决问题,但仅限于 Firefox,因为 IE 不支持。
    • 这个“历史”使用了 IE 10 之前不支持的 HTML5 历史功能。检查caniuse.com/#feat=history。我对后退按钮也有同样的问题,到目前为止我们还没有针对 FF 和 IE 的解决方案。从 11 月开始有什么想法吗?
    猜你喜欢
    • 2015-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-10
    • 2018-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多