JavaScript返回到上一页的三种方法

JavaScript 返回到上一页的三种常用方法

在网页开发中,实现“返回上一页”功能非常常见。JavaScript 提供了多种方式来实现,下面详细介绍三种最常用且可靠的方法,并附带优缺点对比和使用场景。

方法一:history.back()(最常用,推荐)
// 直接返回上一页,等同于点击浏览器“后退”按钮 history.back();// 或者 history.go(-1);

说明

  • history.back()history.go(-1) 效果完全相同。
  • 会触发浏览器的历史记录后退,页面状态(如表单填写、滚动位置)通常能保持(取决于浏览器实现)。

示例(按钮点击返回):

<buttononclick="history.back()">返回上一页</button>

优点

  • 简单、直观。
  • 用户体验最好,模拟真实后退行为。
  • 支持页面状态恢复。

缺点

  • 如果当前页是历史记录的第一页,会无效(不会跳转)。
方法二:history.go(-1)(等同于 back)
history.go(-1);// 后退一步// history.go(-2); // 后退两步// history.go(1); // 前进一步

说明

  • history.go(n) 中的 n 是整数,正数前进,负数后退。
  • history.back() 完全等价,只是写法不同。

使用场景

  • 需要动态控制后退步数时更灵活。
方法三:window.location.href = document.referrer(根据来源页跳转)
if(document.referrer){ window.location.href = document.referrer;}else{// 如果没有来源页(比如直接打开),跳转到指定页面 window.location.href ='/index.html';}

说明

  • document.referrer 返回引发当前页面跳转的上一个页面的 URL(字符串)。
  • 直接设置 location.href 实现跳转。

完整安全示例

<buttononclick="goBack()">返回上一页</button><script>functiongoBack(){if(document.referrer && document.referrer !== window.location.href){ window.location.href = document.referrer;}else{// 备选方案:跳转到首页或指定页面 window.location.href ='/';}}</script>

优点

  • 可以明确知道要跳转到哪个页面。
  • 在某些单页应用(SPA)中更可控。

缺点

  • 如果用户是通过直接输入 URL、书签或搜索引擎进入当前页,document.referrer 会为空。
  • 不会保留浏览器历史栈的“后退”状态(属于新跳转)。
  • 跨域时 referrer 可能被屏蔽(受 Referrer-Policy 影响)。
三种方法对比总结
方法代码是否模拟浏览器后退referrer 是否为空时行为是否保留页面状态推荐度
history.back() / go(-1)history.back()无效(停留在当前页)通常保留★★★★★
history.go(-1)history.go(-1)无效通常保留★★★★★
document.referrerlocation.href = referrer否(新跳转)需要手动处理备选页面不保留★★★
最佳实践建议
  1. 移动端或单页应用(Vue/React) 中常用 history.back(),配合路由守卫更优雅。

需要兼容无来源页的情况,结合 referrer:

functiongoBack(){if(history.length >1){ history.back();}else{ window.location.href ='/';// 跳转到首页}}

大多数场景优先使用history.back()

<buttononclick="history.back()">返回</button>

总结:99% 的情况下,直接使用 history.back() 就是最佳选择,简单可靠,用户体验最好。

Read more

【C++初阶】C++入门相关知识(2):输入输出 & 缺省参数 & 函数重载

【C++初阶】C++入门相关知识(2):输入输出 & 缺省参数 & 函数重载

🎈主页传送门:良木生香 🔥个人专栏:《C语言》 《数据结构-初阶》 《程序设计》《鼠鼠的C++学习之路》 🌟人为善,福随未至,祸已远行;人为恶,祸虽未至,福已远离 上期回顾:在上一篇文章中,我们对C++进行了初步的认识,学习了C++的发展历史,第一个C++程序以及命名空间,我们知道,C++的出现就是为了改进和完善C语言的不足,使得程序更加高效,程序员编写起来更加方便快捷,那么本篇文章我们继续往下认识C++的入门相关知识 目录 一、C++的输入&输出 1.1、核心载体:头文件 1.2、核心的IO对象:cin与cout 1.2.1、std::cin 标准输入流 1.

By Ne0inhk
飞算 JavaAI:让 Java 开发效率翻倍的秘密武器 #飞算JavaAl炫技赛 #Java开发

飞算 JavaAI:让 Java 开发效率翻倍的秘密武器 #飞算JavaAl炫技赛 #Java开发

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 * 飞算 JavaAI:让 Java 开发效率翻倍的秘密武器 #飞算JavaAl炫技赛 #Java开发 * 一、引言 * 二、Java 开发现状与挑战剖析 * 2.1 Java 语言的辉煌历史 * 2.2 传统 Java 开发的那些 “坑” * 2.2.1 开发周期:比蜗牛爬还慢 * 2.2.2 人力成本:高得离谱 * 2.2.3 代码质量:参差不齐 * 2.2.

By Ne0inhk
环境搭建 | [入门级]VSCode(Cursor|Trae|Qoder)搭建Java(Springboot3)企业开发环境全流程

环境搭建 | [入门级]VSCode(Cursor|Trae|Qoder)搭建Java(Springboot3)企业开发环境全流程

VSCode搭建Java企业开发环境全流程 在企业级Java开发(如Springboot)中,IDE的选择至关重要。VSCode凭借其轻量、高效、插件生态丰富的特点,逐渐成为许多开发者的首选。本文将详细介绍如何在VSCode中搭建完整的Java企业开发环境,涵盖从基础软件安装到项目调试运行的全流程,适合刚接触VSCode或想迁移Java开发环境的小伙伴。 当前热门的AI IDE(如Cursor、Trae、Qoder)均基于VSCode开发,因此本教程对这类IDE同样适用。 一、准备工作:安装必要软件 在搭建VSCode Java开发环境前,需先安装两个核心工具:JDK和VSCode。 1.1 安装JDK Java开发依赖JDK(Java Development Kit),企业开发建议选择LTS(长期支持)版本,如JDK 11或JDK 17。 1. 安装JDK:运行安装包,按提示完成安装,建议记住安装路径(如Windows下的C:\Program Files\Eclipse Adoptium\jdk-17.

By Ne0inhk
Java 多态

Java 多态

文章目录 * 多态 * 向上转型和向下转型 * 向上转型和重写 * 重写和重载的区别 * 动态绑定和静态绑定 * 用代码来解释什么是多态 * 向下转型 * 多态的优点 * 总结 多态 1. 什么是多态?为什么要使用多态? 简单来说是多种形态,具体来说是去完成某个事情,当不同对象去完成同一件事表现出来的不同结果/状态 打个比方就是同一个人对待不同人表现出来的形态是不同的 2. 多态实现的三个条件: 向上转型和向下转型 向上转型和重写 1. 将子类对象给父类类型的引用 父类类型 对象名 = new 子类类型() 直接赋值的 classAnimal{publicString name;publicint age;publicAnimal(String name,int age){this.name = name;this.age = age;}// 父类中的this是当前对象的引用publicvoideat(){System.out.println(

By Ne0inhk