【问题标题】:Update $_SERVER['SCRIPT_NAME'] when pressing browser's back button (reload page)按下浏览器的后退按钮(重新加载页面)时更新 $_SERVER['SCRIPT_NAME']
【发布时间】:2018-03-29 07:05:37
【问题描述】:

在 Safari 10.1.1 中,浏览器的后退按钮不会重新加载目标页面,因此 $_SERVER['SCRIPT_NAME'] 不会更改。

有没有办法在按下浏览器的后退按钮时重新加载目标页面。我尝试了以下方法:

header("Cache-Control: no-cache, no-store, must-revalidate"); // HTTP 1.1.
header("Pragma: no-cache"); // HTTP 1.0.
header("Expires: 0"); // Proxies.

这不起作用。

背景:我尝试在 PHP 中构建可靠的页面历史记录,但是如果浏览器的后退按钮没有触发服务器上的任何内容,我该怎么办?

谢谢!

【问题讨论】:

  • 建立可靠的页面历史记录的目的是什么?你想达到什么目的?我想你可以用 AJAX 做点什么,但是为什么?您是否考虑过使用 JavaScript 的 History API 进行导航?
  • 感谢您的评论。我试着把它分解:我有一个起始页和一个第二页。我从起始页移动到第二页并返回。如果我从第二页进入起始页,则应显示/触发不同的内容(服务器上的不同操作)。实现这一目标的正确方法是什么?谢谢!

标签: php html safari


【解决方案1】:

在您的情况下,浏览器根本不会调用服务器。 在大多数情况下,浏览器只会显示上一页的“本地/缓存”版本,不会启动与服务器的连接。

您可能会在这里找到一些 javascript 解决方案来强制重新加载: How to force reloading a page when using browser back button? 或这里How to refresh page on back button click?

最相关的部分是windows.performance 对象的使用。

if(!!window.performance && window.performance.navigation.type === 2)
{
    window.location.reload();
}

【讨论】:

  • 非常感谢。我认为一些“无缓存”命令(在 PHP 或 HTML 站点上)可以停止缓存,因此浏览器必须启动与服务器的连接。有没有这样的?
  • 您提供的标头示例已经很好,您无需再添加任何内容,因此如果浏览器仍然保留缓存版本,则 JS 是唯一的解决方法。您是否在每个页面上都应用了这些标题(当前页面和加载前一个页面之前的“前一个”页面)?
  • 是的,页眉适用于每一页。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-02
  • 2014-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-26
相关资源
最近更新 更多