window.location导致浏览器返回按钮失效,无法回到a.php求助
为啥返回按钮回不去a.php?来排查下!
兄弟,你这个情况确实有点反常——正常用window.location = "b.php"跳转的话,浏览器历史栈里肯定会保留a.php的记录,点击返回按钮应该能顺利回去才对。我帮你梳理几个可能的原因和解决思路:
一、先检查a.php里的跳转逻辑有没有被干扰
- 有没有可能你的
#go按钮被绑定了重复的点击事件?比如其他代码偷偷把跳转改成了window.location.replace()(这个方法会直接替换当前历史记录,不会新增,所以返回就会跳过a.php)。你可以在点击事件里加个日志确认下:
$("#go").click(function(){ console.log("正在跳转到b.php"); window.location.href = "b.php"; });
打开浏览器的开发者工具(按F12),切换到Console标签,点击go按钮看看有没有这个日志输出,确认执行的是你写的跳转逻辑。
- 检查a.php里有没有其他JS代码用了
history.replaceState()这类API,不小心修改了历史栈,把a.php的记录覆盖了。
二、再看看b.php有没有搞事情
虽然你贴的b.php代码是空的,但也要确认:
- 有没有引入其他JS文件?这些文件里会不会有修改历史记录或者自动跳转的代码?
- 有没有服务器端的跳转?比如b.php里写了
header("Location: ...")这类PHP代码,服务器端跳转也可能影响历史栈的记录。
三、兜底的解决办法
如果排查一圈还是找不到问题,试试这两个方案:
- 手动维护历史记录再跳转:在a.php的点击事件里先手动把当前页面推入历史栈,再跳转:
$("#go").click(function(){ history.pushState({page: "a"}, document.title, window.location.href); window.location.href = "b.php"; });
- 在b.php监听返回事件:直接给返回按钮加个监听,点击时强制跳回a.php:
window.addEventListener('popstate', function() { window.location.href = "a.php"; });
四、最后排除浏览器的小问题
试试用无痕模式打开页面测试,或者清空浏览器缓存,有时候缓存异常也会导致历史记录出问题。
内容的提问来源于stack exchange,提问作者Somomo1q
相关产品推荐
相关产品推荐

