如何用自定义脚本抑制history.back()触发的表单重提交确认提示?
解决表单重提交提示的可行方案
以下是基于你只能自定义两个HTML页面的限制,给出的几种解决思路:
1. 用history.replaceState覆盖历史记录状态
在第二个页面加载完成后,替换当前的历史记录条目,把原本由POST跳转产生的记录替换成GET请求的状态。这样浏览器返回时会以GET方式加载前一页,不会触发重提交提示。
window.addEventListener('load', () => { // 用当前页面的GET地址覆盖历史记录中的POST状态 window.history.replaceState(null, document.title, window.location.href); });
2. 自定义返回按钮直接跳转到原页面的GET地址
放弃使用history.back(),让自定义按钮直接发起GET请求跳转到第一个页面的URL(通常原页面本身是通过GET访问的),绕过历史记录里的POST提交状态。
<button onclick="window.location.href='这里填第一个页面的完整URL'">返回</button>
3. 同域下用sessionStorage标记并触发GET重加载
如果两个页面属于同域,可以通过会话存储标记状态,让第一个页面在检测到从第二个页面返回时,自动以GET方式重新加载自己,覆盖POST的历史状态。
- 第二个页面添加代码:
window.addEventListener('load', () => { sessionStorage.setItem('fromSecondPage', '1'); });
- 第一个页面添加代码:
window.addEventListener('load', () => { if (sessionStorage.getItem('fromSecondPage')) { sessionStorage.removeItem('fromSecondPage'); // 去掉URL中的参数(如果有的话),以GET方式重新加载并替换历史记录 window.location.replace(window.location.origin + window.location.pathname); } });
内容的提问来源于stack exchange,提问作者junidev
相关产品推荐
相关产品推荐

