繁体   English   中英

Chrome:如何检测历史导航(已按下后退按钮)

[英]Chrome: How to detect history navigation (back button having been pressed)

我知道,这个问题看起来与那些经常被问到和重新问到的问题非常相似,例如:
使用浏览器后退按钮时如何强制重新加载页面?

我需要知道用户是否有...
. 导航到当前页面,或重新加载当前页面(在这两种情况下页面已正常加载,我不需要进一步的特定操作)
. 或者已经使用历史后退前进按钮到达当前页面(在这些情况下,页面加载,只是从浏览器缓存中取出,我需要采取进一步的行动 - 最简单的是重新加载页面, window.location.reload();或等价物)。

我尝试了此处公开的解决方案: https:https://stackoverflow.com/a/43043658/3872061和此处: https://stackoverflow.com/a/56851042/3872061以及其他几个地方,无论是否在 Stackoverflow 内。

它适用于 Firefox (105.0.1)、Edge (105.0.1343.50),但我无法让它与 Chrome (105.0.5195.127) 一起使用。

这是我能想到的最简单的测试。

第 1.html 页

<!doctype html>
<html>
<head>
  <meta charset="utf-8" />
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
  <script>
    $(window).on("pageshow", function(e){

      $("#type").text(window.performance.getEntriesByType("navigation")[0].type);
      let historyTraversal = event.persisted
        || ( typeof window.performance != "undefined" && window.performance.getEntriesByType("navigation")[0].type === "back_forward" );
      if ( historyTraversal ) { // Handle page restore.
        $("#backOrNot").text('User just came back using the history "back" button');
        //window.location.reload(); // this is actually the targetted action: reload page
      }
      else {
        $("#backOrNot").text('User loaded the page');
      }

    });
  </script>
</head>
<body>
  <p id="backOrNot"></p>
  <p>( window.performance.getEntriesByType("navigation")[0].type = <span id="type"></span> )</p>
  <p><a href="page2.html">Just a link from where you can click the history back button</a></p>
</body>
</html>

第 2.html 页

<!doctype html>
<html>
<head>
  <meta charset="utf-8" />
</head>
<body>
  <p>
    From here, try to:<br>
    1. Navigate to <a href="page1.html">page1.html</a><br>
    2. Go back to page1.html using the history back-button
  </p>
</body>
</html>

对于 FF 和 Edge,当您使用历史返回到page1时,“back_forward”信息可用。
使用 Chrome,您只需获得页面在初始加载时的状态(“导航”或“重新加载”),就好像您从未导航过然后使用后退按钮返回一样。
我错过了什么? 我在这里做错了什么?

如果您发送页面标题以不允许缓存该itemsList.php页面,您的页面将自动重新加载。 我的测试代码——在这里查看答案——应该可以帮助您理解这个概念。 我仍在努力寻找一种更好的方法来以不同的方式解决该问题。 就我而言,如果按下后退按钮(返回一页),我将启动一个“页面正在加载微调器”,该微调器不会将自身重置为隐藏状态。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM