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

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

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

10900 次点击
所在节点    JavaScript
64 条回复
horizon
2021-09-15 09:22:23 +08:00
没办法
kop1989
2021-09-15 09:28:41 +08:00
不太理解区分页签关闭和浏览器 app 关闭的业务场景。
一个页签,就是一个浏览器进程。
v2byy
2021-09-15 09:30:04 +08:00
js run 在 render 进程里面的,感知不了 browser 进程吧
yunyuyuan
2021-09-15 09:32:55 +08:00
这个涉及了用户隐私吧。https://stackoverflow.com/questions/3888902/detect-browser-or-tab-closing

你可以用 sessionStorage,这个数据只持续到浏览器关闭
dzdh
2021-09-15 09:37:16 +08:00
ws 断开就关了
IceBay
2021-09-15 09:37:35 +08:00
每隔一段时间更新时间戳到 localStorage 进行对比?
MoeMoesakura
2021-09-15 09:41:16 +08:00
@dzdh 不能保证吧,要是用户合上了笔记本,进入睡眠模式,你怎么判断啊
FaiChou
2021-09-15 09:44:42 +08:00
还是说清楚下具体需求吧, 不然光从你的问题来看, 用户关闭了浏览器(tab), 进程(线程)都杀死了, js 肯定都被干掉了, 你的判断逻辑也不能正常运行.
aristolochic
2021-09-15 09:46:30 +08:00
瞧这问题问的,要是用户用一个软件的 WebView 打开你的网站,你难道还想去监听这个用户是关了你的页面还是关了整个软件? Web 怎么可能让你知道那么多,岂不是反了天了。现在浏览器标准都是安全越收越紧,是绝对不可能再出一个 API 告诉你浏览器关了的。

说白了对于 Web 而言,网站是不应该也不可能 Native aware 的,且不说 Tab 这些概念不是所有浏览器都有,比如有那种就一个页面的浏览器( surf 就是,在平铺窗口管理器生态有一定市场),还有那么多 WebView 也是没有标签的,更不可能让你了解到原生的情况。

浏览器插件 /扩展倒是可以知道标签的状态,具体能不能知道浏览器关没关就没了解过了。

要想完全控制,老老实实套 Electron 。
itechnology
2021-09-15 09:51:47 +08:00
我觉得是做不到的。浏览器不可能让你知道它是否被关闭了。
Rheinmetal
2021-09-15 09:55:13 +08:00
今天想知道关闭浏览器
明天想干什么我都不敢想了
:doge:
fregie
2021-09-15 10:18:17 +08:00
runtime 都没了,你的代码都运行不了了,要怎么判断..
dzdh
2021-09-15 10:18:32 +08:00
@MoeMoesakura 跟关了 tab 有啥区别
mywaiting
2021-09-15 10:23:02 +08:00
想知道浏览器是否关闭,如果条件合适还是可以做到的

举个例子来说,稍有点互联网经验的同学都会装 ADBlock 插件,页面引入的 JS 检测一下 ADBlock 插件的 API 能否调用就能检测浏览器是否在关闭状态

不过这里面有个鸡先还是蛋先的问题,浏览器都关闭,还怎么页面引入 JS 来检测?

很尴尬对吧?
sampeng
2021-09-15 10:29:03 +08:00
你是想浏览器关闭,弹出来:“你真的想关吗?不要关好吗”
cyrbuzz
2021-09-15 10:37:00 +08:00
道是有的,不过比较奇怪,要看用户是否接受。

昨天撸了一遍 Chrome 插件编写,其中有 tabs 权限与 window 权限(这个随便自己配)的插件,可以通过 tabs 的 onRemoved 和 window 的 onRemoved 事件监听到标签以及整个窗口的关闭,这样就可以感知到时 tab 的关闭还是窗口的关闭。

所以这个道可以是引导用户安装你的特定插件。

tabs remove https://developer.chrome.com/docs/extensions/reference/tabs/#method-remove

window remove https://developer.chrome.com/docs/extensions/reference/windows/

另外这种需求也比较好奇...
TomatoYuyuko
2021-09-15 10:45:07 +08:00
如果你想做清除操作,一般是在进入页面初始化的时候做,而不是离开页面的时候做。类似的操作大多如此。
fkdtz
2021-09-15 10:54:08 +08:00
就像黄志诚和韩琛怎么知道陈永仁和刘建明有没有被发现甚至挂了?定期联系联系呗。

要是哪天联系不上了,八成是挂了。
dunn
2021-09-15 10:56:50 +08:00
@sampeng 请选择 再看一会 残忍关闭
lin07hui
2021-09-15 11:02:12 +08:00
tab 页面关闭和浏览器关闭 这也要区别?
刷新可以使用 sessionStorage 来做

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

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

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

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

© 2021 V2EX