关于监听浏览器页面/浏览器的关闭按钮

关于监听浏览器页面/浏览器的关闭按钮

老师,

因为每次关闭页面,都无法退出登录状态,想要再次登录,又登不进去了,

所以我想写一个功能:


点击浏览器关闭按钮,阻止默认事件,弹出自定义的提示框,点击自定义提示框上的确定按钮后,执行注销登录函数—— backtomain()这个函数,页面会跳转至登录页


因为之前写了一个退出登录按钮,调用backtomain()函数,实现了上述需求的后半段(点击退出登录按钮,弹出自定义的提示框,再点击提示框就能跳转回登录页)


于是只需要监听浏览器页面关闭按钮,然后阻止默认事件,并调用backtomain()这个函数,似乎就可以了


下面是我的尝试,和出现的问题:


我的尝试:

window.onbeforeunload = function (e) {
    e = e || window.event;
    // 兼容IE8和Firefox 4之前的版本
    if (e) {
        e.returnValue = false;
        // e.preventDefault();
    }
    // Chrome, Safari, Firefox 4+, Opera 12+ , IE 9+
    e.preventDefault();
    backtomain(); // 这个是注销登录的函数,会弹出自定义提示框
    // return '离开页面';
  };

https://img1.sycdn.imooc.com//climg/61cbc2e5099205b609730829.jpg

问题:

  1. 为什么我阻止了默认事件,在执行完363行代码(也就是显示提示框那个代码)后,还是会出现这个浏览器自带的弹框呢?

  2. 阻止页面关闭的默认事件,和阻止浏览器关闭的默认事件,是一样的吗,如果不是一样的,那可以分别监听吗?

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好,老师这边测试,window.onbeforeunload方法中不需要写阻止默认事件的代码(如图),就能够关闭浏览器自带的默认提示框,而且阻止页面关闭的默认事件,和阻止浏览器关闭的默认事件是一样的,不需要分别监听,同学可以自己试一试:

https://img1.sycdn.imooc.com//climg/61cbd166093ea52307690350.jpg

另外,关于“每次关闭页面,都无法退出登录状态,想要再次登录,又登不进去了”这个问题,建议同学使用sessionStorage来保存登录状态,这样页面关闭或浏览器关闭的时候,sessionStorage中保存的登录状态也会销毁。然后通过判断sessionStorage是否存在来退出登录,这样就不用麻烦的去监听浏览器窗口或者页面的关闭事件。

祝学习愉快!

  • 柠檬楠 提问者 #1

    1. 我反复尝试了下我的代码,发现了其中的问题:window.onbeforeunload会在执行完里面的代码以后就关闭标签页,而如果里面如果出现判断条件,也无法停止浏览器继续关闭。


    比如判断一个参数,若存在则不能关闭浏览器,若不存在才能关闭。

            var strFlag = '222'
            window.onbeforeunload = function (e) {
                if(strFlag = '222'){
                    // alert("你未完成任务你无法退出!")
                    layer.msg('信息提示弹窗,默认停留三秒')
                    return false
                }
            }

    因为需要回到页面重新手动操作参数,所以有办法让其不满足条件时,阻止window.onbeforeunload方法继续运行吗?或者有什么其他思路。。。

    2. 通过判断sessionStorage是否存在来退出登录,已实现,谢谢老师指点

    2021-12-29 18:21:42
  • 好帮手慕然然 回复 提问者 柠檬楠 #2

    同学你好,老师测试了一下,同学所写的代码是可以弹出提示框的,直接点击取消就可以了,代码中有个问题需要修改一下,如图

    https://img1.sycdn.imooc.com//climg/61cc3c2309d8b40108620787.jpg

    另外,同学也可以参考一下官网的说明:https://developer.mozilla.org/zhCN/docs/Web/API/WindowEventHandlers/onbeforeunload

    祝学习愉快!

    2021-12-29 18:36:41
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师