我在余烬应用程序的工作(使用烬-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包括两个不正确的东西,
最初的前缀“/销售/新#”。
参数 “?&_ SUID = 1365149991779013736531657156165” 在URL的查询字符串。
我试图找出问题,发现HTML4浏览器不支持从HTML5的历史API pushState的和replaceState方法。 我怎么能提供IE8的支持,任何人都可以帮助我在此?
我建议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