通过浏览器加载页面时触发加载脚本(js或jQuery)'s”;返回“;作用

Triggering an onload script (js or jQuery) when loading the page via the browser's "BACK" function

本文关键字:加载 jQuery 作用 返回 js 浏览器 脚本      更新时间:2023-09-26

当通过浏览器的BACK按钮或键命令访问页面时,我找不到执行脚本的方法。(背景:我需要知道是否使用浏览器的BACK按钮或按键命令打开了页面。然后我可以检查存储的会话存储变量并触发一些适当的东西)。

例如,如果我把这个放进我的页面代码中

<script>
  $(document).ready(function() {
    alert("YES!");
    /* in the real situation: do something */
    })
</script>

,当我通过链接加载页面或通过在地址栏中键入URL直接打开页面时,将显示警报。

但当我通过BACK按钮进入该页面时,此警报将不会出现

我用$(window).on("load", function() {...$(window).on("navigate", function () {...做了同样的尝试——也没有成功。。。

编辑/添加:

我刚刚意识到浏览器在这方面的行为有所不同:Chrome、Opera、IE和Firefox Windows会正确地重新加载页面(并触发document.ready()onload()事件),但Firefox Mac和Safari不会——它们从缓存加载整个页面,而不会触发document.ready()onload()。(我还没有尝试过移动浏览器)

所以我搜索了避免缓存内容的解决方案,但到目前为止我所发现和尝试的(很多!)也没有奏效。。。

在阅读了大量的帖子并尝试了其中的解决方案并将问题缩小到浏览器问题后,我发现了这个答案,这迫使页面也在Safari(显然还有Firefox/Mac)中重新加载:

https://stackoverflow.com/a/13123626/5641669

从本质上讲,当通过Safari上的后退按钮到达页面时,这个jQuery代码会以原始状态重新加载页面,这也允许在页面加载上触发任何所需的脚本:

$(window).bind("pageshow", function(event) {
    if (event.originalEvent.persisted) {
        window.location.reload() 
    }
});