4
js 怎么判断用户关闭了浏览器
source link: https://www.v2ex.com/t/801913
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
js 怎么判断用户关闭了浏览器
各位大哥,请问一下使用 js 怎么判断用户关闭了浏览器, 我现在用的是 window.onbeforeunload,但是没办法区分 tab 页面关闭、刷新和浏览器关闭。 求教。
49 条回复 • 2021-09-15 18:55:46 +08:00
horizon 9 小时 43 分钟前
aristolochic 9 小时 19 分钟前
瞧这问题问的,要是用户用一个软件的 WebView 打开你的网站,你难道还想去监听这个用户是关了你的页面还是关了整个软件? Web 怎么可能让你知道那么多,岂不是反了天了。现在浏览器标准都是安全越收越紧,是绝对不可能再出一个 API 告诉你浏览器关了的。
说白了对于 Web 而言,网站是不应该也不可能 Native aware 的,且不说 Tab 这些概念不是所有浏览器都有,比如有那种就一个页面的浏览器( surf 就是,在平铺窗口管理器生态有一定市场),还有那么多 WebView 也是没有标签的,更不可能让你了解到原生的情况。
浏览器插件 /扩展倒是可以知道标签的状态,具体能不能知道浏览器关没关就没了解过了。
要想完全控制,老老实实套 Electron 。
说白了对于 Web 而言,网站是不应该也不可能 Native aware 的,且不说 Tab 这些概念不是所有浏览器都有,比如有那种就一个页面的浏览器( surf 就是,在平铺窗口管理器生态有一定市场),还有那么多 WebView 也是没有标签的,更不可能让你了解到原生的情况。
浏览器插件 /扩展倒是可以知道标签的状态,具体能不能知道浏览器关没关就没了解过了。
要想完全控制,老老实实套 Electron 。
mywaiting 8 小时 43 分钟前
想知道浏览器是否关闭,如果条件合适还是可以做到的
举个例子来说,稍有点互联网经验的同学都会装 ADBlock 插件,页面引入的 JS 检测一下 ADBlock 插件的 API 能否调用就能检测浏览器是否在关闭状态
不过这里面有个鸡先还是蛋先的问题,浏览器都关闭,还怎么页面引入 JS 来检测?
很尴尬对吧?
举个例子来说,稍有点互联网经验的同学都会装 ADBlock 插件,页面引入的 JS 检测一下 ADBlock 插件的 API 能否调用就能检测浏览器是否在关闭状态
不过这里面有个鸡先还是蛋先的问题,浏览器都关闭,还怎么页面引入 JS 来检测?
很尴尬对吧?
cyrbuzz 8 小时 29 分钟前
道是有的,不过比较奇怪,要看用户是否接受。
昨天撸了一遍 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/
另外这种需求也比较好奇...
昨天撸了一遍 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/
另外这种需求也比较好奇...
sha851092391 6 小时 29 分钟前
这个需求很简单吧,在 window.onbeforeunload 弹出对话框,询问用户 “请选择你关闭的原因:1 、标签页关闭; 2 、刷新; 3 、浏览器关闭; 4 、不告诉你”,这样实现还合法,完美~
lakehylia 2 小时 43 分钟前
楚门怎么知道自己生活在虚拟的世界里?他自己是不知道的,只有世界之外的女主进来了,他才知道。
hengshenyu 33 分钟前
好像很多人觉得不行啊?我觉得理论上还是有可行性的
1. 首先 onbeforeunload 这个接口在 tab 关闭时会触发
2. Navigator.sendBeacon()这个接口在浏览器关闭和 tab 关闭都会触发,没错:虽然不能告诉死人他死了,但是可以告诉他家人(即使浏览器关了也可以通知后端)
那么:在 1 没触发且 2 触发了,此时即为用户关闭了浏览器而不是关闭了标签页。
以上仅理论
1. 首先 onbeforeunload 这个接口在 tab 关闭时会触发
2. Navigator.sendBeacon()这个接口在浏览器关闭和 tab 关闭都会触发,没错:虽然不能告诉死人他死了,但是可以告诉他家人(即使浏览器关了也可以通知后端)
那么:在 1 没触发且 2 触发了,此时即为用户关闭了浏览器而不是关闭了标签页。
以上仅理论
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK