我正在使用ember应用程序(使用ember-1.0.pre.js)。我正在尝试在IE8上提供跨浏览器兼容性。
问题是在每次转换后生成url,对用户来说似乎是错误/错误的。假设我点击了the_ domain_name/sell/new
之类的网址,它最初让我看到我们应用程序的销售页面。然后我尝试通过一个名为“购买”的新状态,这将使我进入我们应用程序的购买页面。
新状态转换在IE8地址栏中生成URL the_ domain_name/sell/new#/offers/purchase?&suid=1365149991779013736531657156165
而不是the
domain_name/offers/purchase
。
注意: the_domain_name = http://www.example.com
生成的网址包含两个不正确的内容,
初始前缀“/ sell / new#”。
网址查询字符串中的参数“?& _suid = 1365149991779013736531657156165”。
我试图找出问题,发现HTML4浏览器不支持HTML5中的History API中的pushState和replaceState方法。我如何在IE8上提供支持任何人都可以帮助我吗?
答案 0 :(得分:11)
我建议将History.js
作为不支持历史记录API的浏览器的填充:https://github.com/browserstate/history.js
正在努力:
HTML5浏览器:
HTML4浏览器:
添加jquery.history.js&在您的Ember App中注册history.js
位置处理程序。
以下是我从原始Ember.HistoryLocation
(Full code)
(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中使用此polyfill:
App.Router.reopen({
location: 'historyJs'
});