首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用浏览器原生“后退”按钮关闭带有JS的模式窗口

基础概念

在Web开发中,浏览器原生的“后退”按钮用于导航回用户之前访问的页面。当用户点击这个按钮时,浏览器会加载历史记录中的上一个URL。如果当前页面是通过JavaScript打开的一个模式窗口(modal window),用户可能会期望点击“后退”按钮能够关闭这个窗口并返回到之前的页面。

相关优势

  • 用户体验:用户可以通过熟悉的浏览器操作来控制窗口的打开和关闭,这符合用户的直觉和习惯。
  • 一致性:使用浏览器的原生功能可以保持与用户在其他网站上的体验一致。

类型

  • 模态窗口(Modal Window):覆盖在当前页面上,阻止用户与底层页面交互的窗口。
  • 弹出窗口(Popup Window):通常在新标签页或新窗口中打开,可能会被浏览器拦截。

应用场景

  • 表单验证失败后的提示窗口。
  • 用户登录或注册的弹窗。
  • 重要通知或警告信息的展示。

遇到的问题及原因

当用户点击浏览器的“后退”按钮时,如果模式窗口是由JavaScript打开的,浏览器默认行为是导航到历史记录中的上一个URL,而不是关闭窗口。这是因为浏览器无法区分窗口是通过JavaScript打开的还是用户手动输入URL打开的。

解决方法

要实现点击“后退”按钮关闭模式窗口,可以通过以下步骤:

  1. 监听popstate事件:当用户点击“后退”按钮时,浏览器会触发popstate事件。
  2. 关闭模式窗口:在popstate事件的回调函数中,添加逻辑来关闭模式窗口。
代码语言:txt
复制
// 假设模式窗口是由window.open打开的
let modalWindow = window.open('modal.html', '_blank');

// 监听popstate事件
window.addEventListener('popstate', function(event) {
    // 关闭模式窗口
    if (modalWindow && !modalWindow.closed) {
        modalWindow.close();
    }
});

// 在打开模式窗口后,手动添加一个历史记录条目
history.pushState({modal: true}, '', '#modal');

参考链接

通过上述方法,可以在用户点击浏览器的“后退”按钮时关闭由JavaScript打开的模式窗口,从而提供更好的用户体验。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

js判断页面是否是通过浏览器后退按钮返回打开的

分享一个bug的处理方法 # 背景 最近使用uni-app开发项目时遇到了一个bug,需求是需要在两个平台之间切换,A平台登录后要选择身份,选完后带着token进入另外一个平台B的个人空间,点击个人空间顶部的个人信息区域又可以切换到...是W3C性能小组引入的新的API,目前IE9以上的浏览器都支持。...(用户通过后退按钮访问本页面) 255 : TYPE_RESERVED Any navigation types not defined by values above....(客户端重定向,例如使用Refresh pragma伪指令的客户端重定向,在本规范中不视为HTTP重定向。...所以我们只要判断type属性为2时就可以知道页面是通过返回按钮打开的了,然后开头的问题就可以据此加判断来解决token异常了。 ?

17K20

E005Web学习笔记-JavaScript(三):BOM

; 2、常用的BOM对象 1、window对象 ,是JS的最顶层对象,其他的BOM对象都是window对象的属性; 2、document对象,(DOM)文档对象; 3、location对象,浏览器当前...,可以直接使用; (2)方法: ①与弹出框有关的方法; alert()显示带有一段消息和一个确认按钮的警告框; confirm()显示带有一段消息以及确认按钮和取消按钮的对话框; -- 如果用户点击确定按钮...open()打开一个新的浏览器窗口或查找一个已命名的窗口; close()关闭浏览器窗口; 代码演示: 关闭窗口...参数: 正数:前进几个历史记录; 负数:后退几个历史记录; (3)属性 length返回当前窗口历史列表中的网址数; 代码示例: <!

7110
  • JavaScript交互式网页设计 • 【第3章 JavaScript浏览器对象模型】

    状态栏文本 window 对象常用方法 方法 说明 prompt 显示可提示用户输入的对话框 alert 显示带有一个提示消息和一个确定按钮的警示框 confirm 显示一个带有提示信息、确定和取消按钮的确认框...close 关闭浏览器窗口 open 打开一个新的浏览器窗口,加载给定URL所指定的文档 setTimeout 在设定的毫秒数后调用函数或计算表达式 setInterval 按照设定的周期(以毫秒计)...window对象操作窗口 window对象的 open() 方法和 close() 方法用于打开和关闭窗口 open方法的第一个参数是新窗口的URL,第二个参数是给新窗口的命名,第三个参数是设置新窗口的特征...,使用 history对象可以将当前浏览器页面跳转到某个曾经打开过的页面 方法 描述 back() 后退一个页面,相当于浏览器后退按钮 forward() 前进一个页面,相对于浏览器前进按钮 go()...alert() 方法:显示带有一个提示消息和一个“确定”按钮的警示框 confirm() 方法:显示一个带有提示信息、“确定”和“取消”按钮的确认框 open() 方法:打开一个新的浏览器窗口,

    81410

    JavaScript-BOM

    JavaScript-BOM 简介 BOM:浏览器对象模型(Browser Object Model) 提供了独立于内容,可以与浏览器窗口进行互动的对象结构 可实现功能 1.弹出新的浏览器窗口 2.移动...,关闭浏览器窗口以及调整窗口大小 3.页面的前进后退 window对象 常用属性 history Window.history是一个只读属性,不存在赋值 有关客户访问过得URL的信息 location...方法名称 说 明 prompt( ) 显示可提示用户输入的对话框 alert( ) 显示带有一个提示信息和一个确定按钮的警示框 confirm( ) 显示一个带有提示信息、确定和取消按钮的对话框 close...( ) 关闭浏览器窗口 open( ) 打开一个新的浏览器窗口,加载给定 URL 所指定的文档 setTimeout( ) 在指定的毫秒数后调用函数或计算表达式 setInterval( ) 按照指定的周期...() 用新的文档替换当前文档 window.location.replace("https://www.baidu.com"); js内置对象 Array String Math 方法 说 明 示例

    35410

    Matplotlib 中文用户指南 7.1 交互式导航

    交互式导航 原文:Interactive navigation 译者:飞龙 协议:CC BY-NC-SA 4.0 所有图形窗口都带有导航工具栏,可用于浏览数据集。...以下是工具栏底部的每个按钮的说明: Home(首页)、Forward(前进)和Back(后退)按钮: 这些类似于 Web 浏览器的前进和后退按钮。 它们用于在之前定义的视图之间来回浏览。...它们没有意义,除非你已经使用平移和缩放按钮访问了其他地方。 这类似于尝试在访问新页面之前单击 Web 浏览器上的返回 - 什么都不会发生。 首页总是你第一个浏览的页面,以及你的数据的默认视图。...对于Home,Forward和Back,应该将其看做 Web浏览器,其中的数据视图是网页。 使用Pan和Zoom来定义新视图。 Pan/Zoom(平移/缩放)按钮 此按钮有两种模式:平移和缩放。...可以使用鼠标左键拖动半径轴标签。 可以使用鼠标右键放大和缩小半径刻度。 Zoom-to-rectangle(缩放到矩形)按钮 单击此工具栏按钮以激活此模式。 将鼠标放在轴域的某处,然后按鼠标左键。

    2.1K20

    JSP 防止网页刷新重复提交数据

    "),然后用JS来提交表单,完成后window.close(); 简单的说,就是提交表单的时候弹出新窗口,关闭本窗口。...但有时候我们不得不关闭这个功能,以防止用户打乱预定的页面访问次序。本文介绍网络上可找到的各种禁用浏览器后退按钮方案,分析它们各自的优缺点和适用场合。    ...遗憾的是,答案非常简单:我们无法禁用浏览器的后退按钮。         起先我对于居然有人想要禁用浏览器的后退按钮感到不可思议。...后来,看到竟然有那么多的人想要禁用这个后退按钮,我也就释然(想要禁用的只有后退按钮,不包括浏览器的前进按钮)。因为在默认情况下,用户提交表单之后可以通过后退按钮返回表单页面(而不是使用“编辑”按钮!)...一种更安全但相当恼人的方法是,当表单提交时打开一个新的窗口,与此同时关闭表单所在的窗口。但我觉得这种方法不值得认真考虑,因为我们总不能让用户每提交一个表单就打开一个新窗口。

    11.6K20

    如何制作自己的原生 JavaScript 路由

    但实际上,这些库和框架仍然使用 vanilla JavaScript。那么该怎么实现呢? 我希望这个“JavaScript 路由教程”能够帮你了解如何用原生 JS 写出自己的路由。...既然你看到本文,那意味着你可能也是其中的一个! 最重要的是,使用 vanilla JS router 可以减少你对框架的依赖。...太糟糕了,因为单击浏览器的“后退”和“前进”按钮与浏览历史记录中的 URL 导航有关。如果没有 History API,就无法谈论路由。...这就是使浏览器无需重新加载页面即可更改 URL 的原因。 结果:现在,每次我们单击按钮时,URL 实际上都会在浏览器的地址栏中更改。内容框也会更新。 ? 我们的原生 JS 路由开始运行了。...这取决于你的程序。可以是任何东西。 使“后退”和“前进”按钮起作用 通过使用 history.pushState,你将自动使 Back 和 Forward 按钮导航到上一个或下一个状态。

    3.9K20

    pyqt5实现浏览器与下载文件弹框

    +flask+html+css+js+浏览器,但是很多人都说奇怪。...另外我们希望打开软件时启动docker,关闭窗口时同步关闭docker,使用系统浏览器无法做到这点。因为打开系统浏览器有很多种方案,印象中都是异步,并且没有相应的通知接口。...所以考虑了新方案,docker+flask+html+css+js+自建浏览器,自建浏览器界面做成原生应用的样子。且自建浏览器打算采用pyqt5,其自带chromium。...QToolBar创建导航栏,并使用QAction创建按钮 # 添加导航栏 navigation_bar = QToolBar('Navigation')...(navigation_bar) #QAction类提供了抽象的用户界面action,这些action可以被放置在窗口部件中 # 添加前进、后退、停止加载和刷新的按钮

    3.7K21

    第十二章:vue路由进阶使用

    掌握编程式路由的使用方法 掌握路由守卫的使用方法 一、vue路由的历史和编程式路由导航 1.1 vue路由的历史管理 简介: 在之前的原生js中 我们可以通过一些方式去控制网页跳转的历史记录,在vue...浏览器历史记录介绍: **历史记录栈:**浏览器有一个数据结构来存储网页的历史记录,我们把它称之为历史记录栈,因为它的结构跟栈的使用方式有些相似。...也就是说在我们之前的代码示例中,只要跳转组件,就一定要通过路由才可以;但是我们在实际开发中有些时候(某一些组件跳转时),可能不方便使用路由来完成,此时我们可能是需要页面中有一个按钮,我们点击按钮,不触发路由...想要导航到不同的 URL,则使用 ​​router.push​​ 方法。这个方法会向 history 栈添加一个新的记录,所以,当用户点击浏览器后退按钮时,则回到之前的 URL。...2.6 路由的两种模式 hash模式 默认为hash模式 也就是说路径中带有​​​#​​ 并且这个#号后边的信息不会被发送到后台服务器中。

    4500

    JavaScript BOM

    "; window.location=""; Window对象的常用方法方法名称说明prompt( )显示可提示用户输入的对话框alert( )显示带有一个提示信息和一个确定按钮的警示框confirm...( )显示一个带有提示信息、确定和取消按钮的对话框close( )关闭浏览器窗口open( )打开一个新的浏览器窗口,加载给定 URL 所指定的文档setTimeout( )在指定的毫秒数后调用函数或计算表达式...,黙认是yestitlebar=yes | no | 1 | 0是否显示标题栏,黙认是yesfullscreen=yes | no | 1 | 0是否使用全屏模式显示浏览器,黙认是no。...处于全屏模式的窗口必须同时处于剧院模式History对象保存用户上网的历史记录,可通过window.history属性访问常用属性和方法类别名称说明属性length返回历史记录列表中的网址数方法back...等价于,history.go(-1)浏览器中的“后退”history.forward()等价于,等价于浏览器中的“前进”Location对象包含有关当前URL的信息,可通过window.location

    78320

    前端猿要了解的基本浏览器(BOM)知识

    ,页面宽度 document.body.clientHeight,页面高度 浏览器实现标准不一,模式也不一定统一,还要考虑移动浏览器兼容,所以建议使用前做判断是否存在这个值,没有就换个属性,反正主要就上面两种方式...导航和打开窗口 window.open() window对象中最为常见的方法,在JS代码里面打开网页的最常见的方法。...,浏览器的主窗口是无法用代码关闭的,必须由人自己关闭 var w = window.open("https://www.baidu.com/","Baidu","width=300,height=200...安全限制 由于打开新网页是如此简单,所以不免有人设置程序,短时间内自动打开许多广告页面,所以许多浏览器都做了限制 比如 IE 不允许弹出的窗口随意拖动至浏览器外,不允许关闭状态栏 比如 Firefox...会强制在弹出窗口中显示地址栏 另外的浏览器甚至规定,在一个页面尚未加载完成时,不允许执行 window.open() 语句,只能通过单击某个浏览器提供的按钮或者敲键盘打开 当然也可以为自己的浏览器安装弹窗屏蔽插件

    88310

    JavaScript禁用浏览器后退按钮

    产生一个“前进”的动作,以抵消后退功能,这种方法应该是最简洁的,并且不需要考虑用户连点两次或多次“后退”的情况,缺点是当用户端禁用了JavaScript之后即失效。...这种方法的原理是,用新页面的URL替换当前的历史纪录,这样浏览历史记录中就只有一个页面,后退按钮永远不会变为可用。我想这可能正是许多人所寻求的方法,但这种方法仍旧不是任何情况下的最好方法。...3、当键盘敲下后退键(Backspace)后 1、禁止浏览器自动后退 2、但不影响密码、单行文本、多行文本输入框等的回退操作 代码如下: ...“后退”按钮作出的反应,客户端浏览器需要打开JavaScript代码。...,同时又保证了后退按钮不可用(新窗口浏览器后退按钮为灰色),看起来似乎是个好方法,但缺点也比较明显: 首先,关闭和重开的浏览器窗口大小可能不同,用户可以明显看出这一过程,并且在一定程度上影响操作。

    1.9K30

    Android开发人员不得不学习的JavaScript基础(二)

    1、window对象 window对象是BOM的核心,window对象指当前的浏览器窗口,window对象中有很多种方法供开发者调用: 方法 描述 alert() 显示带有一段消息和一个确认按钮的警告框...prompt() 显示可提示用户输入的对话框 confirm() 显示带有一段消息以及确认按钮和取消按钮的对话框 open() 打开一个新的浏览器窗口,或者查找一个已命名的窗口 close() 关闭浏览器窗口...取消setTimeOut的值 2、history对象 history对象记录了用户曾经浏览过的页面(URL),并可以实现浏览器前进与后退相似导航的功能。...可以使用userAgent属性来判断使用的是什么浏览器: ?...,单位为像素 colorDepth 用户浏览器表示的颜色位数,通常为32位(每像素的位数)(IE浏览器不支持) pixelDepth 窗口可以使用的屏幕高度,单位为像素 height 屏幕的高度,单位为像素

    74230

    WebDriverIO教程:处理Selenium中的警报和覆盖

    1、警报弹出 2、确认提示 3、提示弹出 警报弹出窗口 弹出警报或alert()方法将显示一个仅带有消息和“确定”按钮的警报框。该警报用于通知用户一些信息。信息文本仅显示一个按钮“确定”。...在此,用户只有一个选项可以按“确定”按钮。以下是警报弹出的示例。 确认提示 确认警报是带有消息的第二种警报,它使用户可以选择按“确定”或“取消”。这是确认警报的示例。...在模式中,通过提供特殊的CSS代码使用标记来完成。单击模态以外的其他位置可以关闭该模态。 叠加模态 该模式是使用客户端框架(例如,引导程序,ReactJS)构建的。...它可以帮助用户单击“警报”弹出窗口上的“确定”按钮。...警报只能通过预期的操作关闭,而覆盖模式可以通过单击背景上的任意位置来关闭。现在,我将向您展示如何使用WebDriverIO自动执行叠加模态。 当自动化模态时,您不必处理特殊的代码或类。

    5.9K30
    领券