使用 jQuery 更改浏览器中的后退按钮功能

Posted

技术标签:

【中文标题】使用 jQuery 更改浏览器中的后退按钮功能【英文标题】:Change back button functionality in browser using jQuery 【发布时间】:2014-03-30 07:32:42 【问题描述】:

是否可以在浏览器中更改后退按钮的地址?比如我在这个页面:

http://website.com/page3.php

我提交了一个表单,它返回了这个地址:

http://website.com/page3.php?ok=ok

然后当我转到另一个页面时,例如

http://website.com/blog.html

然后点击后退按钮,它会回到上面有 $_GET 变量的页面。我希望当我点击浏览器的后退按钮到这里时:

http://website.com/page3.php

是否有可能对于(浏览器的)后退按钮,每当我刚从带有变量的特定页面返回时单击它,它也不会获取变量?

【问题讨论】:

可能对你有帮助:bstavroulakis.com/blog/web/overriding-the-browsers-back-button 【参考方案1】:

我认为您可以在http://website.com/page3.php 中的表单上设置会话变量。然后在http://website.com/page3.php?ok=ok 提交完成后取消设置。

并且每次加载 url 中带有变量的页面时,立即检查提交会话变量以查看是否从表单页面重定向到页面。如果没有,将您重定向回 page3.page。

我希望我说得够清楚!

【讨论】:

【参考方案2】:

这是不可能的,你可以通过使用 pushState 和浏览器历史记录一起破解一些东西

【讨论】:

【参考方案3】:

一种方法是使用 AJAX 进行表单发布请求。

另一种方法是将令牌添加到您的表单中,并在服务器端检查它们以使用 header() 进行重定向(如果它们不存在)。 例如:

<?php
    session_start();
    if(isset($_GET['ok']))
        if(isset($_SESSION['form_page3_token']))
            $_SESSION['form_page3_token'] = null;
            //first request : do your stuff
        else
            //repost (F5 or Back in the browser => redirect to origin form)
            header('Location: http://www.website.com/page3.php');
        
    else
         $_SESSION['form_page3_token'] = session_id();
         //here the code to show the form
    
?>

【讨论】:

【参考方案4】:

如果用户点击指向您页面的链接,单击“返回”会再次将其从页面中移除,您无法覆盖该行为。

【讨论】:

【参考方案5】:

您可以使用 window.location.replace() 更改位置,或者在您的 URL 中实现深度链接(如果它是后哈希路由):

Difference between window.location.href, window.location.replace and window.location.assign

http://en.wikipedia.org/wiki/Deep_linking

干杯,

安德鲁

【讨论】:

以上是关于使用 jQuery 更改浏览器中的后退按钮功能的主要内容,如果未能解决你的问题,请参考以下文章

Javascript/jQuery 仅在浏览器后退/前进按钮单击时检测哈希更改

如何用jQuery禁用浏览器的前进后退按钮

使用jquery在浏览器中禁用后退按钮?

使用浏览器后退按钮时如何强制重新加载页面?

JQuery 阻止浏览器后退按钮

Jquery 禁用浏览器的 后退和前进按钮