JavaScript实现智能返回:仅限同源域名跳转

JavaScript实现智能返回:仅限同源域名跳转

本文将介绍如何使用javascript实现一个智能的“返回上一页”功能,确保用户点击返回按钮时仅在当前域名内跳转。通过检查`document.referrer`与`window.location.hostname`,可以有效防止用户被意外导航到外部网站,提升用户体验和安全性。

引言:定制化返回按钮的挑战

在Web应用开发中,为用户提供一个“返回上一页”的按钮是常见的需求。虽然浏览器自带的返回功能足以应对大多数情况,但在某些定制化场景下,开发者可能需要通过JavaScript来控制这一行为。例如,一个单页应用(SPA)可能需要更精细的导航控制,或者一个特定页面需要确保用户始终停留在当前网站内部。然而,简单地调用history.back()可能会带来意想不到的问题,尤其是在涉及到页面来源检查时。

理解history.back()的局限性

history.back()函数能够让浏览器导航到历史记录中的上一个页面。它的行为与用户点击浏览器“后退”按钮相同。问题在于,这个“上一个页面”可以是任何网站,包括用户从外部网站链接到当前页面,或者在当前网站内部跳转。如果我们的定制返回按钮旨在将用户带回本站的某个页面,那么当上一个页面是外部网站时,直接使用history.back()就可能将用户引导至站外。这可能不符合预期,造成用户困惑,甚至带来安全风险或糟糕的用户体验。例如,一个恶意链接可能将用户带到你的网站,然后通过一个定制的“返回”按钮将用户重定向回恶意网站。

智能返回机制的核心:document.referrer与window.location.hostname

为了实现一个“智能”的返回功能,即仅当上一个页面属于当前域名时才执行history.back(),我们需要利用两个关键的浏览器属性:document.referrer和window.location.hostname。

document.referrer 简介

document.referrer 属性返回导航到当前页面的上一页的URL。它是一个字符串,包含了来源页面的完整URL。如果用户直接输入URL、通过书签访问、从新标签页打开,或者从一个设置了“无referrer”策略的页面跳转而来,这个属性可能为空字符串。它提供了一个检查页面来源的机制。

立即学习“Java免费学习笔记(深入)”;

window.location.hostname 简介

window.location.hostname 属性返回当前页面的主机名(即域名),例如 www.example.com 或 localhost。它不包含协议(如http:、https:)或端口号。

通过比较 document.referrer 中包含的主机名是否与 window.location.hostname 相同,我们就能判断上一页是否属于当前域名。

实现智能返回功能

以下是实现这一功能的JavaScript代码示例:

/** * 安全地返回上一页,仅当上一页属于当前域名时执行。 * 如果上一页不属于当前域名,可以根据业务需求执行其他操作。 */function goBackSafely() {    // 检查 document.referrer 是否存在且包含当前页面的主机名    // document.referrer 可能为空字符串,或者包含完整的URL    if (document.referrer && document.referrer.includes(window.location.hostname)) {        history.back(); // 如果上一页是同域名,则返回上一页    } else {        // 可选:如果上一页不属于当前域名,可以执行其他操作,例如跳转到首页或显示提示        console.warn("上一页不属于当前域名或referrer不可用,不执行 history.back()。");        // 示例:跳转到网站首页,提供一个明确的导航路径        // window.location.href = "/";         // 示例:或者只是保持在当前页面,不做任何操作    }}// 如何在HTML中调用:// 

代码解析:

function goBackSafely():定义一个名为 goBackSafely 的函数,用于封装返回逻辑。document.referrer:获取当前页面的来源URL。window.location.hostname:获取当前页面的域名。document.referrer && document.referrer.includes(window.location.hostname):这是核心判断逻辑。document.referrer:首先判断 document.referrer 是否有值(非空字符串),避免对空字符串调用 includes 方法。document.referrer.includes(window.location.hostname):接着检查 document.referrer 字符串中是否包含当前页面的主机名。如果包含,则表示上一页来自同一个域名。history.back():如果上述条件满足(即上一页是同域名页面且referrer可用),则执行浏览器返回操作。else 分支:当上一页不属于当前域名,或者 document.referrer 不可用时,可以根据业务需求进行处理,例如不执行任何操作,或者跳转到网站的特定页面(如首页),以提供更好的用户体验。

注意事项与最佳实践

document.referrer 的限制:

空字符串: 如果用户直接访问当前页面(例如通过书签、直接输入URL),或者从一个“无referrer”策略的页面(如某些隐私保护浏览器设置或HTTP头部Referrer-Policy: no-referrer)跳转而来,document.referrer 将为空字符串。在这种情况下,上述代码不会执行 history.back()。跨域 如果上一页是跨域的,document.referrer 会包含完整的URL。然而,某些安全策略可能会限制或省略referrer信息。HTTP到HTTPS: 从HTTP页面跳转到HTTPS页面时,referrer信息通常不会传递。iframe: 在iframe中,document.referrer会是包含该iframe的父页面的URL。

用户体验考量:当不满足同域名返回条件时,需要考虑用户的预期。是保持在当前页面,还是提供一个替代的导航方案(例如,跳转到网站首页或某个特定页面)?在上述代码的 else 分支中可以实现这些逻辑,以确保用户不会陷入“无路可走”的境地。

安全性增强:此方法有效增强了安全性,防止恶意网站通过诱导用户点击自定义返回按钮,将其重定向回钓鱼网站或其他不期望的外部页面。这对于维护网站的信任度和用户安全至关重要。

总结

通过巧妙地结合 document.referrer 和 window.location.hostname,我们可以为Web应用实现一个更加智能和安全的“返回上一页”功能。这不仅提升了用户体验,确保了导航的连贯性,也有效规避了潜在的安全风险。在设计自定义导航逻辑时,深入理解这些浏览器API的特性及其局限性至关重要,从而构建健壮且用户友好的Web应用程序。

以上就是JavaScript实现智能返回:仅限同源域名跳转的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1589153.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月23日 04:52:35
下一篇 2025年12月23日 04:52:47

相关推荐

  • 学会从头开始学习CSS,掌握制作基本网页框架的技巧

    从零开始学习CSS,掌握网页基本框架制作技巧 前言: 在现今互联网时代,网页设计和开发是一个非常重要的技能。而学习CSS(层叠样式表)是掌握网页设计的关键之一。CSS不仅可以为网页添加样式和布局,还可以为用户呈现独特且具有吸引力的页面效果。在本文中,我将为您介绍一些基本的CSS知识,以及一些常用的代…

    2025年12月24日
    200
  • 揭秘Web标准涵盖的语言:了解网页开发必备的语言范围

    在当今数字时代,互联网成为了人们生活中不可或缺的一部分。作为互联网的基本构成单位,网页承载着我们获取和分享信息的重要任务。而网页开发作为一门独特的技术,离不开一些必备的语言。本文将揭秘Web标准涵盖的语言,让我们一起了解网页开发所需的语言范围。 首先,HTML(HyperText Markup La…

    2025年12月24日
    000
  • 揭开Web开发的语言之谜:了解构建网页所需的语言有哪些?

    Web标准中的语言大揭秘:掌握网页开发所需的语言有哪些? 随着互联网的快速发展,网页开发已经成为人们重要的职业之一。而要成为一名优秀的网页开发者,掌握网页开发所需的语言是必不可少的。本文将为大家揭示Web标准中的语言大揭秘,介绍网页开发所需的主要语言。 HTML(超文本标记语言)HTML是网页开发的…

    2025年12月24日
    400
  • 常用的网页开发语言:了解Web标准的要点

    了解Web标准的语言要点:常见的哪些语言应用在网页开发中? 随着互联网的不断发展,网页已经成为人们获取信息和交流的重要途径。而要实现一个高质量、易用的网页,离不开一种被广泛接受的Web标准。Web标准的制定和应用,涉及到多种语言和技术,本文将介绍常见的几种语言在网页开发中的应用。 首先,HTML(H…

    2025年12月24日
    000
  • 网页开发中常见的Web标准语言有哪些?

    探索Web标准语言的世界:网页开发中常用的语言有哪些? 在现代社会中,互联网的普及程度越来越高,网页已成为人们获取资讯、娱乐、交流的重要途径。而网页的开发离不开各种编程语言的应用和支持。在这个虚拟世界的网络,有许多被广泛应用的标准化语言,用于为用户提供优质的网页体验。本文将探索网页开发中常用的语言,…

    2025年12月24日
    000
  • 深入探究Web标准语言的范围,涵盖了哪些语言?

    Web标准是指互联网上的各个网页所需遵循的一系列规范,确保网页在不同的浏览器和设备上能够正确地显示和运行。这些标准包括HTML、CSS和JavaScript等语言。本文将深入解析Web标准涵盖的语言范围。 首先,HTML(HyperText Markup Language)是构建网页的基础语言。它使…

    2025年12月24日
    000
  • 项目实践:如何结合CSS和JavaScript打造优秀网页的经验总结

    项目实践:如何结合CSS和JavaScript打造优秀网页的经验总结 随着互联网的快速发展,网页设计已经成为了各行各业都离不开的一项技能。优秀的网页设计可以给用户留下深刻的印象,提升用户体验,增加用户的黏性和转化率。而要做出优秀的网页设计,除了对美学的理解和创意的运用外,还需要掌握一些基本的技能,如…

    2025年12月24日
    200
  • CSS 超链接属性解析:text-decoration 和 color

    CSS 超链接属性解析:text-decoration 和 color 超链接是网页中常用的元素之一,它能够在不同页面之间建立连接。为了使超链接在页面中有明显的标识和吸引力,CSS 提供了一些属性来调整超链接的样式。本文将重点介绍 text-decoration 和 color 这两个与超链接相关的…

    2025年12月24日
    000
  • 学完HTML和CSS之后我应该做什么?

    网页开发是一段漫长的旅程,但是掌握了HTML和CSS技能意味着你已经赢得了一半的战斗。这两种语言对于学习网页开发技能来说非常重要和基础。现在不可或缺的是下一个问题,学完HTML和CSS之后我该做什么呢? 对这些问题的答案可以分为2-3个部分,你可以继续练习你的HTML和CSS编码,然后了解在学习完H…

    2025年12月24日
    000
  • 聊聊怎么利用CSS实现波浪进度条效果

    本篇文章给大家分享css 高阶技巧,介绍一下如何使用css实现波浪进度条效果,希望对大家有所帮助! 本文是 CSS Houdini 之 CSS Painting API 系列第三篇。 现代 CSS 之高阶图片渐隐消失术现代 CSS 高阶技巧,像 Canvas 一样自由绘图构建样式! 在上两篇中,我们…

    2025年12月24日 好文分享
    200
  • 巧用距离、角度及光影制作炫酷的 3D 文字特效

    如何利用 css 实现3d立体的数字?下面本篇文章就带大家巧用视觉障眼法,构建不一样的 3d 文字特效,希望对大家有所帮助! 最近群里有这样一个有意思的问题,大家在讨论,使用 CSS 3D 能否实现如下所示的效果: 这里的核心难点在于,如何利用 CSS 实现一个立体的数字?CSS 能做到吗? 不是特…

    2025年12月24日 好文分享
    000
  • CSS高阶技巧:实现图片渐隐消的多种方法

    将专注于实现复杂布局,兼容设备差异,制作酷炫动画,制作复杂交互,提升可访问性及构建奇思妙想效果等方面的内容。 在兼顾基础概述的同时,注重对技巧的挖掘,结合实际进行运用,欢迎大家关注。 正文从这里开始。 在过往,我们想要实现一个图片的渐隐消失。最常见的莫过于整体透明度的变化,像是这样: 立即学习“前端…

    2025年12月24日 好文分享
    000
  • 看看这些前端面试题,带你搞定高频知识点(一)

    每天10道题,100天后,搞定所有前端面试的高频知识点,加油!!!,在看文章的同时,希望不要直接看答案,先思考一下自己会不会,如果会,自己的答案是什么?想过之后再与答案比对,是不是会更好一点,当然如果你有比我更好的答案,欢迎评论区留言,一起探讨技术之美。 面试官:给定一个元素,如何实现水平垂直居中?…

    2025年12月24日 好文分享
    300
  • 看看这些前端面试题,带你搞定高频知识点(二)

    每天10道题,100天后,搞定所有前端面试的高频知识点,加油!!!,在看文章的同时,希望不要直接看答案,先思考一下自己会不会,如果会,自己的答案是什么?想过之后再与答案比对,是不是会更好一点,当然如果你有比我更好的答案,欢迎评论区留言,一起探讨技术之美。 面试官:页面导入样式时,使用 link 和 …

    2025年12月24日 好文分享
    200
  • 看看这些前端面试题,带你搞定高频知识点(三)

    每天10道题,100天后,搞定所有前端面试的高频知识点,加油!!!,在看文章的同时,希望不要直接看答案,先思考一下自己会不会,如果会,自己的答案是什么?想过之后再与答案比对,是不是会更好一点,当然如果你有比我更好的答案,欢迎评论区留言,一起探讨技术之美。 面试官:清除浮动有哪些方式? 我:呃~,浮动…

    2025年12月24日 好文分享
    000
  • 看看这些前端面试题,带你搞定高频知识点(四)

    每天10道题,100天后,搞定所有前端面试的高频知识点,加油!!!,在看文章的同时,希望不要直接看答案,先思考一下自己会不会,如果会,自己的答案是什么?想过之后再与答案比对,是不是会更好一点,当然如果你有比我更好的答案,欢迎评论区留言,一起探讨技术之美。 面试官:请你谈一下自适应(适配)的方案 我:…

    2025年12月24日 好文分享
    000
  • 看看这些前端面试题,带你搞定高频知识点(五)

    每天10道题,100天后,搞定所有前端面试的高频知识点,加油!!!,在看文章的同时,希望不要直接看答案,先思考一下自己会不会,如果会,自己的答案是什么?想过之后再与答案比对,是不是会更好一点,当然如果你有比我更好的答案,欢迎评论区留言,一起探讨技术之美。 面试官:css 如何实现左侧固定 300px…

    2025年12月24日 好文分享
    000
  • css实现登录按钮炫酷效果(附代码实例)

    今天在网上看到一个炫酷的登录按钮效果;初看时感觉好牛掰;但是一点一点的抛开以后发现,并没有那么难;我会将全部代码贴出来;如果有不对的地方,大家指点一哈。 分析 我们抛开before不谈的话;其实原理和就是通过背景大小以及配合位置达到颜色渐变的效果。 text-transform: uppercase…

    2025年12月24日
    000
  • CSS flex布局属性:align-items和align-content的区别

    在用flex布局时,发现有两个属性功能好像有点类似:align-items和align-content,乍看之下,它们都是用于定义flex容器中元素在交叉轴(主轴为flex-deriction定义的方向,默认为row,那么交叉轴跟主轴垂直即为column,反之它们互调,flex基本的概念如下图所示)…

    2025年12月24日 好文分享
    000
  • 手把手教你用 transition 实现短视频 APP的点赞动画

    怎么使用纯 css 实现有趣的点赞动画?下面本篇文章就带大家了解一下巧妙借助 transition实现点赞动画的方法,希望对大家有所帮助! 在各种短视频界面上,我们经常会看到类似这样的点赞动画: 非常的有意思,有意思的交互会让用户更愿意进行互动。 那么,这么有趣的点赞动画,有没有可能使用纯 CSS …

    2025年12月24日 好文分享
    000

发表回复

登录后才能评论
关注微信