检测 JS 是否刷新了页面或用户是否刷新了页面


Detect whether the JS refreshed the page or if user did

有什么方法可以检测窗口是否被用户刷新或是否是window.location.reload(); js命令已执行并刷新页面?

因为如果用户刷新了页面/导航,我想取消设置过滤器会话变量,并且如果我重新加载(javascript),我想保留此过滤器会话变量。

我尝试与$_SERVER['HTTP_REFERER']合作

当我做window.location.reload()时,$_SERVER['HTTP_REFERER']成为完整的当前路径链接,所以我尝试这样做:

if(!isset($_SERVER['HTTP_REFERER']) || $_SERVER['HTTP_REFERER'] != url::base(true).Request::current()->uri())
{
    $session = Session::instance();
    $session->delete('deal_filter');
}

但这并不有效,只是有时有效。

如果我无法以这种方式检测到它,还有其他方法可以做到这一点吗?

您可以尝试向页面提交带有值的 POST 请求,而不是刷新。 我想您需要做的就是添加一个表单,

<form name="refresh_form" action="mypage.php" method="post">
<input type="hidden" name="refresh" value="yes">
</form>

将用于刷新的 Javascript 代码替换为一些用于提交表单的代码,

document.refresh_form.submit();

并检查页面上 PHP 中的值:

if (isset($_POST['refresh']))
{
    // handle the case when your Javascript submitted the refresh
}