Javascript onpopstate处理程序-ajax返回按钮

Javascript onpopstate处理程序-ajax返回按钮,javascript,ajax,html,google-chrome,Javascript,Ajax,Html,Google Chrome,我正在使用pushState为我的站点上的ajax内容创建有意义的URL。我想在用户点击前进或后退按钮时刷新ajax内容。然而,当chrome(正确地)在“历史遍历”(前进/后退按钮)和“结束”(页面加载)上实现onpopstate时,我遇到了一些问题。我想创建一个onpopstate处理程序,区分页面加载和历史遍历,因为如果ajax内容刚刚成功加载,我不想刷新它。有人能帮我区分这两者吗 window.onpopstate = function (event) { // If : For

我正在使用pushState为我的站点上的ajax内容创建有意义的URL。我想在用户点击前进或后退按钮时刷新ajax内容。然而,当chrome(正确地)在“历史遍历”(前进/后退按钮)和“结束”(页面加载)上实现onpopstate时,我遇到了一些问题。我想创建一个onpopstate处理程序,区分页面加载和历史遍历,因为如果ajax内容刚刚成功加载,我不想刷新它。有人能帮我区分这两者吗

window.onpopstate = function (event) {
    // If : Forward/back button pressed
        // Reload any ajax content with new variables
    // Else : Page load complete
        // Do nothing - content already loaded and correct
}
有关chrome和onpopstate的更多详细信息,请参阅


感谢

一种方法是在页面加载时将变量初始化为false,然后在popstate事件中检查该变量。如果仍然为false,则将其设置为true,并且不执行任何操作。从那时起,所有其他popstate事件应仅来自后退/前进事件

var loaded = false;

window.onpopstate = function(e) {
    if (!loaded) {
        loaded = true;
        return;
    } else {
        // run your stuff...
    }
}

传递给
onpopstate
函数的对象将有一个
state
成员,该成员在页面加载时为
null
,因此您可以执行以下操作:

window.onpopstate = function(event) {
  if(event && event.state) {
    // ...
  }
}
//例如:

window.onpopstate=函数(e){
var count=String(location.pathname).split('/').length;

如果(在Firefox这样的浏览器中,onpopstate在加载时不被调用。这意味着第一次合法的历史遍历pop将被忽略?我这样做是为了跨浏览器…但我不知道应该针对哪些浏览器…Opera、Firefox、safari和chrome可以很好地处理以下内容。window.onpopstate=函数(事件){if(!loaded&&$.browser.webkit){它在Firefox上失败。若要解决此问题,请激发
if(!loaded){loaded=true;return;}
onclick/tap链接。我对此感到困惑;我正在点击一些绑定了click事件的元素,它们都触发了
popstate
事件,它们都有
state:null
。使用
history.pushState({'url':url},title,url);
其中
url
是加载内容的url(查找JSON),然后您可以通过以下方式访问它:
window.onpopstate=function(e){alert(JSON.stringify(e.state.url);}
window.onpopstate = function(e) {
     var count = String(location.pathname).split('/').length;
     if (count<4) {
          location.href = location.href;
     }else {
          $.ajaxLoad(location.pathname);
     }
}