You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使preventBack函数不对指定页面restart.html生效?

解决禁止浏览器返回但排除特定页面的问题

问题根源

你当前的代码在page1.html加载时强制执行history.forward(),会在浏览器历史栈中多添加一条当前页面的记录。当你跳转到page2.html后,点击返回按钮会先回到page1.html,而page1.html的脚本又会立即把页面推回page2.html,导致无法正常返回。另外,你的代码没有做页面判断,所以所有关联页面都会受影响。

方案一:优化原有逻辑,排除特定页面

直接在脚本开头判断当前页面是否为restart.html,如果是就不执行禁止返回的逻辑,同时优化代码写法:

// 检查当前页面是否是restart.html,是则跳过禁止返回逻辑
if (!window.location.href.includes('restart.html')) {
  function preventBack() {
    // 增加历史栈长度判断,避免无意义的forward操作
    if (window.history.length > 1) {
      window.history.forward();
    }
  }
  // 用函数引用代替字符串调用,更安全规范
  setTimeout(preventBack, 0);
  // 清空onunload事件,原有的null写法无效
  window.onunload = function() {};
}

方案二:用popstate事件更可控地禁止返回(推荐)

这种方式不会污染历史栈,只会在当前页面拦截返回操作,对其他页面无影响:

if (!window.location.href.includes('restart.html')) {
  // 页面加载时,添加一条当前页面的历史记录
  window.history.pushState(null, null, window.location.href);
  
  // 监听浏览器返回事件
  window.addEventListener('popstate', function() {
    // 当用户点击返回时,再添加一条当前页面的记录,抵消返回操作
    window.history.pushState(null, null, window.location.href);
  });
}

注意事项

  • 确保脚本只在需要禁止返回的页面(比如page1.html)中引入,不要在restart.html或其他允许返回的页面加载该脚本。
  • 测试时注意清除浏览器缓存,避免旧代码干扰。

内容的提问来源于stack exchange,提问作者0xsined

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 13:15:19