【发布时间】:2013-01-10 18:53:45
【问题描述】:
在早期版本中,我曾经测试是否应该在页面加载时手动触发popstate,因为 Chrome 会在加载后立即触发,而 Firefox 和 IE 则不会。
if ($.browser.mozilla || $.browser.msie) {
$(window).trigger('popstate');
}
现在他们在 1.9 中删除了浏览器对象,我应该如何测试这些浏览器?或者我如何确定是否需要在页面加载时popstate?
代码是:
$(function(){
$(window).on('popstate', popState);
// manual trigger loads template by URL in FF/IE.
if ($.browser.mozilla || $.browser.msie) {
$(window).trigger('popstate');
}
});
更新
为此:
function popState(e){
var initial = e.originalEvent === undefined || e.originalEvent.state === null;
if(!initial){
activateRoute({
key: e.originalEvent.state.key,
settings: e.originalEvent.state.settings
},'replace');
}
}
function init(){
$(window).on('popstate', popState);
$(function(){
var route = getRoute(document.location.pathname);
activateRoute(route, 'replace');
});
}
【问题讨论】:
-
您能否改为监听该事件,如果它在页面加载触发它之前没有发生?
-
请注意,Chrome 的行为是错误的。不过,规格已修复,根据此:w3.org/Bugs/Public/show_bug.cgi?id=18605我实际上不知道那张票在说什么,但我的已作为副本关闭:w3.org/Bugs/Public/show_bug.cgi?id=18405
标签: javascript jquery browser-detection browser-feature-detection