js 怎么判断用户关闭了浏览器

2021-09-15 09:19:54 +08:00
 aizya

各位大哥,请问一下使用 js 怎么判断用户关闭了浏览器, 我现在用的是 window.onbeforeunload,但是没办法区分 tab 页面关闭、刷新和浏览器关闭。 求教。

10409 次点击
所在节点    JavaScript
64 条回复
robinlovemaggie
2021-09-15 16:14:09 +08:00
你这我问题让我想起前两天有人问:人怎么知道死后有没有灵魂?
lakehylia
2021-09-15 16:23:00 +08:00
楚门怎么知道自己生活在虚拟的世界里?他自己是不知道的,只有世界之外的女主进来了,他才知道。
codehz
2021-09-15 16:29:03 +08:00
刷新还是可以做的
用 PerformanceNavigationTiming.type 判断即可
shellus
2021-09-15 17:26:12 +08:00
@zhw2590582 明天醒来你就知道了
StephenHe
2021-09-15 17:49:36 +08:00
又要强奸用户
cw2k13as
2021-09-15 17:56:24 +08:00
websocket
hengshenyu
2021-09-15 18:32:50 +08:00
好像很多人觉得不行啊?我觉得理论上还是有可行性的
1. 首先 onbeforeunload 这个接口在 tab 关闭时会触发
2. Navigator.sendBeacon()这个接口在浏览器关闭和 tab 关闭都会触发,没错:虽然不能告诉死人他死了,但是可以告诉他家人(即使浏览器关了也可以通知后端)

那么:在 1 没触发且 2 触发了,此时即为用户关闭了浏览器而不是关闭了标签页。

以上仅理论
o00o
2021-09-15 18:47:58 +08:00
@meiyoumingzi6
@2i2Re2PLMaDnghL
@qwerthhusn
@zhw2590582 人类怎么判断自己是真实活着还是只是大脑活着
SenLief
2021-09-15 18:55:46 +08:00
不能被动判断,但是可以主动吧,比如填表单的时候如果关闭或者刷新就会弹窗,这是如何实现的?
wangbenjun5
2021-09-15 20:17:47 +08:00
思路奇异啊,怎么判断用户关闭浏览器?假设有方法判断用户关闭浏览器,然后呢?是要阻止用户关闭浏览器吗?哈哈,幸亏 chrome 没有提供这个 API,不然流氓网站上了天
xuanbg
2021-09-15 20:22:28 +08:00
这就好比你自怎么知道自己死掉了一样。答案就是没办法知道。因为你都没有意识了啊

浏览器都关掉了,你一个运行在浏览器里面的 JS 代码,也就同时被关掉了,就算你知道了,也干不了啥事情。。。
jeeyong
2021-09-15 20:34:59 +08:00
以前我记得有个 window.close() 类似的事件?
那会用来做关闭页面后, 弹出广告..
yolee599
2021-09-15 20:48:41 +08:00
换一个说法,电脑怎么判断用户拔掉了主机电源?
44670
2021-09-15 20:57:51 +08:00
navigator.sendBeacon
试试这个
ipwx
2021-09-15 21:07:44 +08:00
@WordlessEcho 你这思路有问题,应该是延迟几秒再确认删除。。。
MrKrabs
2021-09-15 22:28:51 +08:00
人怎么判断自己死了
2i2Re2PLMaDnghL
2021-09-16 02:11:14 +08:00
@hengshenyu 1. beforeunload 在浏览器关闭时也会触发
2. sendBeacon 不是一个可供产生触发的接口,它是一个替代 XHR 和 fetch 的请求用接口。

@jeeyong 因为历史原因,window 是指标签页

@SenLief beforeunload 事件
liuidetmks
2021-09-16 06:34:55 +08:00
我专门在火狐中 关闭了 beforeunload 事件,
觉得弹出提示的网站好烦
gogolang
2021-09-16 08:54:58 +08:00
js 定时发送 http 请求,什么时候请求停了就是关闭浏览器了。
你看这样行不?
luzemin
2021-09-16 09:01:58 +08:00
window.onbeforeunload 拦住弹个窗问用户,你是在关闭 Tab 还是关闭浏览器?(逃

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/801913

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX