javascript - 忽略 Safari 的初始页面加载 popstate

标签 javascript jquery safari

我正在使用 pushState 并根据当前页面的 history.state 在 popstate 事件上生成页面 View 。

如果没有history.state我(希望)重新加载文档。

window.onpopstate = function(event) {
    if( window.history.state !== null ){
        // page was ajax created and history created by pushState
        // recreate with ajax
    }
    else{
        // page was loaded from server normally
        document.location.reload()
    }
}

问题是 Safari 在初始页面加载时触发 popstate 事件。 Chrome 和 Firefox 在后退/前进浏览器按钮上触发 popstate。

我想忽略 Safari 上的初始加载 popstate 事件(理想情况下没有 setTimeout 并且没有浏览器检测)。

此外,该站点是混合链接 - 一些会触发 pushState,一些会从服务器正常加载 - 因此如果用户进入导航历史记录十页并单击后退按钮,历史记录将混合在一起pushState 页面和非 pushState 页面。

最佳答案

我已经解决了将从 window.history.state.order 获得的初始订单值保存在变量中的问题。当触发 on popstate 事件时,会将之前存储的值与当前订单值进行比较。如果它们相同,则无需执行任何操作(您必须忽略 Safari 触发的初始 popstate 值)。在这里你可以看到和例子:

var initial_oder = window.history.state.order || 0;    
window.onpopstate = function(event) {
    if( window.history.state !== null && window.history.state.order !== initial_order){
        // page was ajax created and history created by pushState
        // recreate with ajax
    }
    else{
        // page was loaded from server normally
        document.location.reload()
    }
}

希望对您有所帮助!

关于javascript - 忽略 Safari 的初始页面加载 popstate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28441025/

相关文章:

javascript - 如何突破 .each() 并为函数返回一个值

javascript - Safari 扩展 : passing window object from inject script to global page

html - 搜索栏在 Safari 中不起作用?

javascript - 在 JavaScript 正则表达式中链接多个正向前瞻

javascript - woody 的 WordPress 简码不起作用

带有自动溢出功能的 div 内的 jQuery 可排序表超出了 div

javascript - 将 jQuery 中的错误方法转换为 Javascript

html - Canvas 到视频在 Safari Lion/Mountain Lion 上非常慢

c# - 焦点功能在 ie8 中不起作用

javascript - 根据 DOM 加载的文本更改文本区域高度