忽略Safari's初始页面加载popstate

Ignore Safari's Initial Page Load popstate

本文关键字:加载 popstate Safari 忽略      更新时间:2023-09-26

我使用pushState,并根据当前页面的history.state生成popstate事件的页面视图。

如果没有历史记录,请声明我(希望)重新加载文档。

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获得的初始订单值保存在变量中的问题。当打开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()
    }
}

希望得到帮助!