HTML4浏览器不支持历史记录API的history.pushState和history.repla

2019-08-19 20:26发布

我在余烬应用程序的工作(使用烬-1.0.pre.js)。 我试图以提供IE8跨浏览器兼容。

这个问题与URL生成每次转换之后,它似乎不正确/ falsy用户。 让说我打的网址类似the_ domain_name/sell/new最初登陆我对我们的应用程序的销售页面上。 然后我试图过境所谓“购买”将登陆我,我们的应用程序的购买页面上的新的状态。

新的状态转换生成一个URL the_ domain_name/sell/new#/offers/purchase?& suid=1365149991779013736531657156165在IE8地址栏,而不是the domain_name/offers/purchase

注:the_domain_name = http://www.example.com

生成的URL包括两个不正确的东西,

  1. 最初的前缀“/销售/新#”。

  2. 参数 “?&_ SUID = 1365149991779013736531657156165” 在URL的查询字符串。

我试图找出问题,发现HTML4浏览器不支持从HTML5的历史API pushState的和replaceState方法。 我怎么能提供IE8的支持,任何人都可以帮助我在此?

Answer 1:

我建议History.js作为填充工具的浏览器不支持历史API: https://github.com/browserstate/history.js

它是工作在:

HTML5浏览器:

  • 火狐4+
  • 铬8+
  • 歌剧11.5
  • Safari 5.0及
  • Safari浏览器的iOS 4.3+

HTML4浏览器:

  • IE 6,7,8,9
  • Firefox 3的
  • Opera 10的,11.0
  • Safari 4的
  • Safari浏览器的iOS 4.2,4.1,4.0,3.2

添加jquery.history.js &注册一个history.js位置处理成灰烬你应用。

下面是我从原来的修改部分Ember.HistoryLocation ( 完整代码 )

(function() {
  var get = Ember.get, set = Ember.set;
  var popstateFired = false;
  Ember.HistoryJsLocation = Ember.Object.extend({
    initState: function() {
      this.replaceState(this.formatURL(this.getURL()));
      set(this, 'history', window.History);
    },
    getState: function() {
      return get(this, 'history').getState().state;
    },
    pushState: function(path) {
      History.pushState({ path: path }, null, path);
    },
    replaceState: function(path) {
      History.replaceState({ path: path }, null, path);
    }
  });
  Ember.Location.registerImplementation('historyJs', Ember.HistoryJsLocation);
})();

然后用这个填充工具在您的应用程序:

App.Router.reopen({
  location: 'historyJs'
});


文章来源: Html4 browsers does not support history.pushState and history.replaceState methods of History API from HTML5