×

onbeforeunload(怎么解决刷新不调用onbeforeunload) -白菜网论坛

jngyjg jngyjg 发表于2023-05-31 04:02:24 浏览1 评论0

抢沙发发表评论

页面加载时只执行onload 页面关闭时先执行onbeforeunload,最后onunload 页面刷新时先执行onbeforeunload,onbeforeunload都是在刷新或关闭时调用,onbeforeunload都是在刷新或关闭时调用,onbeforeunload也是在页面刷新或关闭时调用,可以用在以下元素:·body, frameset, window平台支持:ie4 /win, mozilla 1.7a , netscape 7.2 , firefox0.9 onbeforeload事件的用法onbeforeunload 事件在即将离开当前页面(刷新或关闭)时触发,本文目录怎么解决刷新不调用onbeforeunloadonbeforeload事件的用法onbeforeunload除了ie其他浏览器都无效,提示用户是继续浏览页面还是离开当前页面。

本文目录

onunload,onbeforeunload都是在刷新或关闭时调用,可以在《script》脚本中通过window.onunload来指定或者在《body》里指定
onunload,onbeforeunload都是在刷新或关闭时调用,可以在《script》脚本中通过window.onunload来指定或者在《body》里指定。区别在于onbeforeunload在onunload之前执行,它还可以阻止onunload的执行。
onbeforeunload也是在页面刷新或关闭时调用,onbeforeunload是正要去服务器读取新的页面时调用,此时还没开始读取;而onunload则已经从服务器上读到了需要加载的新的页面,在即将替换掉当前页面时调用。onunload是无法阻止页面的更新和关闭的。而 onbeforeunload 可以做到。
页面加载时只执行onload
页面关闭时先执行onbeforeunload,最后onunload
页面刷新时先执行onbeforeunload,然后onunload,最后onload。
1、onbeforeunload事件:
说明:目前三大主流浏览器中firefox和ie都支持onbeforeunload事件,opera尚未支持。
用法:
·object.onbeforeunload = handler
·《element onbeforeunload = “handler” … 》《/element》
描述:
事件触发的时候弹出一个有确定和取消的对话框,确定则离开页面,取消则继续待在本页。handler可以设一个返回值作为该对话框的显示文本。
触发于:
·关闭浏览器窗口
·通过地址栏或收藏夹前往其他页面的时候
·点击返回,前进,刷新,白菜网论坛主页其中一个的时候
·点击 一个前往其他页面的url连接的时候
·调用以下任意一个事件的时候:click,document write,document open,document close,window close ,window navigate ,window navigateandfind,location replace,location reload,form submit.
·当用window open打开一个页面,并把本页的window的名字传给要打开的页面的时候。
·重新赋予location.href的值的时候。
·通过input type=”submit”按钮提交一个具有指定action的表单的时候。
可以用在以下元素:
·body, frameset, window
平台支持:
ie4 /win, mozilla 1.7a , netscape 7.2 , firefox0.9

onbeforeunload 事件在即将离开当前页面(刷新或关闭)时触发。
该事件可用于弹出对话框,提示用户是继续浏览页面还是离开当前页面。
对话框默认的提示信息根据不同的浏览器有所不同,标准的信息类似 “确定要离开此页吗?“。该信息不能删除。但开发者可以自定义一些消息提示与标准信息一起显示在对话框。
注意:
1、如果没有在 《body》 元素上指定 onbeforeunload 事件,则需要在 window 对象上添加事件,并使用 returnvalue 属性创建自定义信息。
2、 在 firefox 浏览器中,只显示默认提醒信息(不显示自定义信息)。

这个坑我也踩过,貌似现代浏览器下都没效果,应该是这些浏览器厂商考虑到用户体验。试想:你按下了关闭页面,结果页面没有立即关闭,而是等执行完一段js才关闭...

话说回来,真正遇到这种需求怎么办?办法倒是有,可以试试 page visibility(页面可见性) api,兼容性ie9以上。你可以在浏览器控制台输入以下测试代码:

setinterval(function() {
    console.log(document.visibilitystate);
}, 1000);

上述代码运行后会检测当前页面的可见性,返回 visible(表示可见)或 hidden(表示当前页面不可见,例如你切换到了其他选项卡或最小化了)。

详情请参阅张大神的博文:http://www.zhangxinxu.com/wordpress/2012/11/page-visibility-api-introduction-extend/