当前位置: 首页 > news >正文

关闭浏览器弹出框onbeforeunload,onunload和onunloadcancel

前言

最近需要做一个阻挡用户关闭页面的功能,大概流程是当用户关闭页面,弹出“确定关闭提示”,点击“离开此页“关闭页面,点击“留在此页”关闭提示框。而当用户下次再关闭的时候不在给予提示。减少用户厌恶感。为了实现功能需要用到了onbeforeunload,onunload和onunloadcancel。

简单说明图:

var text = "真的离开?"
window.onbeforeunload = function(){  return text;  
}  
window.onunload= function(){  return text;  
}  
window.onunloadcancel= function(){  console.log("留下来")
}  



onbeforeunload介绍

当窗口即将被关闭时,会触发该事件.此时页面正常能看见,且该事件的默认动作可以被取消。

window.onbeforeunload = function (e) {e = e || window.event;// 兼容IE8和Firefox 4之前的版本if (e) {e.returnValue = '关闭提示';}// Chrome, Safari, Firefox 4+, Opera 12+ , IE 9+return '关闭提示';
};

ps:
1.刷新页面算是离开页面,也会触发这效果,不过展示框不一样。
2.chrome和firefox的新版本中“text”内容是不会显示的。但还是要填入,不填入firefox是不会显示关闭提示框。
3.HTML5规范声明:在该事件的处理函数中调用下列弹窗相关的方法时,可以忽略不执行,window.showModalDialog(), window.alert(), window.confirm() window.prompt().

onunload介绍

当页面关闭后,会触发unload事件.

window.onunload = function(){}

ps:
如果您重载页面,也会触发 unload 事件(以及 onload 事件)。

onunloadcancel介绍

当用户弹出页面关闭框,点击“留下此页”后触发的。

window.onunloadcancel= function(){}



最终实现

因为要兼容各浏览器版本,且需要支持在关闭浏览器的时候 不会触发。所以修改了一下代码。如下:

function confirmClose(){let _t = null;let isShow  = truelet _text = "只在IE上会显示提示";window.onbeforeunload = function(event) {_do(event);}window.onunload = function(event) {_do(event);}window.onunloadcancel = function() {clearTimeout(_t);}function _do(event){event = event || window.event;setTimeout(function() {_t = setTimeout(onunloadcancel, 0)}, 0);var browser = navigator.appName;if(event && isShow) {isShow = false;event.returnValue = _text;}if(isShow) {if(browser == "Netscape") {return _text;} else {window.event.returnValue = _text;}}}
}confirmClose()//放置需要引用的地方
http://www.xdnf.cn/news/834625.html

相关文章:

  • 浅谈“游戏行业第三方支付平台“
  • 学习QT之容器类
  • 电脑无法打开Excel文件怎么办?
  • 如何获得CSDN下载积分和C币规则
  • Java网络编程:概述--快速入门
  • Linux 大文件如何切割与合并?
  • `simple-reactjs-app` 开源项目使用指南
  • python怎么存储数据_【Python】存储数据
  • 【zip密码破解】AZPR==>ARCHPR4.5
  • 机器人学笔记(2)正运动学
  • 打造专业级网页排版:全方位解析专业字体家族font-family实践与全球知名字体库导览
  • 如何使用PartitionMagic 8.0汉化版(图文说明)(转载)
  • debian12.5国内镜像源配置清单
  • 【WinForm】WinForm中的TableLayoutPanel控件、PropertyGrid控件、PictureBox控件、ListView控件、DataGridView控件的使用
  • 嵌入式系统电源管理软件比较
  • 技术干货 | GreatDB新一代读写分离架构,如何炼就近乎0损耗的性能?
  • C# Invoke和BeginInvoke的区别
  • python中shutil.copyfile的用法_python处理文件和文件的方法(shutil,filecmp ,MD5,tarfile,zip)...
  • FTP地址大全
  • GoLang之interface
  • PostgreSQL学习总结(13)—— PostgreSQL 目录结构与配置文件 postgresql.conf 详解
  • 骡友们推荐的各个学习英文网站的汇总
  • 【Unity插件】最多的插件合集
  • CDMA2000简介
  • Scanner类中next()、nextInt()和nextLine()方法的区别
  • Windows Server 2008 各版本介绍
  • Java——防止SQL注入的几种策略
  • 网络安全方面有哪些认证,看完这篇你就知道了
  • mscorsvw.exe是什么
  • 法国国际广播电台官方网站