防止表单POST被后退按钮取消

时间:2015-07-02 13:30:35

标签: javascript jquery html asp.net-mvc back-button

我正在尝试实现一些代码,以防止后退按钮在我的网站中的页面上执行任何操作。页面发布一个表单来处理付款,因此不希望用户按回来,否则最终会出现奇怪的用户体验。有服务器端代码来处理它,但希望尽可能地防止客户端。

我的问题是即使我使用像这里提到的方法:how to stop browser back button using javascript

问题在于,虽然页面现在永远不会返回,但只要按下后退按钮,表单POST就会被取消。(使用Chrome浏览器。)

我目前的代码是:

    function() {
        if(window.history && window.history.pushState) {
            window.history.pushState({ page: 1 }, $(document).find("title").text(), null);
            window.addEventListener('popstate', function (e) {
                e.preventDefault();
                e.stopPropagation();
                window.history.pushState({ page: 1 }, $(document).find("title").text(), null);
            });
        }
        else {
            window.location.hash = "pp";
            window.onhashchange = function (e) {
                e.preventDefault();
                e.stopPropagation();
                window.location.hash = "pp";
            };
        }
    }

我能在这做什么吗?

1 个答案:

答案 0 :(得分:0)

不幸的是,你无能为力。您可以停止按后退按钮(更改页面)的最终结果,但无法停止点击它的副作用(导致当前待处理的请求停止) )。

您可以做的最好的事情是按下后退按钮时捕获,确定表单是否已发送但未收到响应,然后提醒用户表单可能已发送。然后,您可以尝试将用户定向到下一页,如果没有收到,您​​可以将其设计为回到付款页面。

这样的问题很难分析边缘情况。 :)