浏览器:仅使用JavaScript防止刷新时重新提交POST数据

dtb*_*ker 3 javascript wordpress

解决:找到答案:WordPress window.history.replaceState在每个页面加载时使用。这样可以防止在刷新/返回时重新提交POST。原始问题如下:

我知道这里有许多发布/重定向/获取问题。这个有点不同。我找不到解释该特定JavaScript解决方案的答案。

当您通过POST提交表单,然后点击刷新按钮时,浏览器将提示我重新提交数据。但是,此提示不会在WordPress后端(启用JS时)发生,并且发布后没有重定向/获取。

我尝试在下面的一系列屏幕快照中显示此内容。它显示了第一次POST提交,并在页面上打印了POST数据,然后刷新导致GET,而没有任何浏览器重新提交提示。

浏览器无需提交即可重新提交

当我禁用JavaScript并单击刷新时,会出现预期的“您是否想重新提交数据?”。提示,刷新将导致第二次POST。

js已禁用,发生了正常的重新提交

因此,WordPress在这里做了一些JavaScript魔术,以防止在刷新/返回按钮上重新提交POST数据。

谁能指出我在WordPress中显示仅使用JavaScript即可实现此目标的代码?我什至不知道从哪里开始搜索。

他们用pushstate做些什么吗?

谢谢!

dtb*_*ker 6

解决方案:WordPress window.history.replaceState在每次页面加载时使用。

这样可以防止POST刷新或后退按钮再次运行。

好漂亮!

非WordPress概念证明在这里:https : //dtbaker.net/files/prevent-post-resubmit.php

代码是:

<script>
    if ( window.history.replaceState ) {
        window.history.replaceState( null, null, window.location.href );
    }
</script>
Run Code Online (Sandbox Code Playgroud)