问题:
工作遇到需要单点登录的需求,前端需要配合后端需要在整个浏览器关闭和浏览器tab标签关闭时通知后端用户下线,通过百度获得的方法是:window的onbeforeunload事件
但是它的触发条件是(根据 MSDN):
-关闭当前浏览器窗口。
-导航到另一个进入一个新的地址或选择一个喜欢的位置。
-单击后退,前进,刷新,或主页按钮。
- 点击一个链接到新页面。
-调用 超链接的 click 方法。
-调用 document.write 方法。
- 调用 document.open 方法。
- 调用 document.close 方法。
-调用 window.close 方法。
- 调用 window.open 方法,窗口名称设置值为 _self。
-调用 window.navigate 或 NavigateAndFind 方法。
-调用 location.replace 方法。
- 调用 location.reload 方法。
-指定一个 location.href 属性的新值。
-使用 submit 按键提交表单,或调用 form.submit 方法
如何排除其他的触发条件只相应tab关闭和浏览器关闭,百度了下比较多的是:
window.onbeforeunload = function() {
var n = window.event.screenX - window.screenLeft;
var b = n > document.documentElement.scrollWidth - 20;
if (!(b && window.event.clientY < 0 || window.event.altKey)) {
//window.event.returnValue = "真的要刷新页面么?";
//这里放置我想执行缓存的代码
cacheFunction();
}
}
但是正的不可行。根本没有screenX、clientY之类的属性 event里,甚至收到去年2018还有这样的文章,真是误人弟子,尚未找到合适的排除法