JS 能否在关闭页面时执行一个较长时间的回调

2017-08-21 10:37:23 +08:00
 whileFalse

需要数秒的网络通讯

4421 次点击
所在节点    JavaScript
22 条回复
otakustay
2017-08-21 10:57:07 +08:00
不能
denano
2017-08-21 11:16:44 +08:00
你可以试试监听关闭页面的事件,然后执行一个同步的方法。这样做的话如果方法执行时间比较长,就会有一种点了关闭页面却没有反馈的糟糕体验
shyling
2017-08-21 11:24:55 +08:00
耗时任务可以参考 Inbox 的处理。。。
lommo
2017-08-21 11:27:07 +08:00
直接关闭标签页 怎么执行
autoxbc
2017-08-21 11:36:08 +08:00
数据存本地,下次启动再同步
whileFalse
2017-08-21 11:51:10 +08:00
@autoxbc #5 这个不行,因为涉及到和其他设备同步。

@shyling #3 能详细说说嘛?
jugelizi
2017-08-21 12:06:10 +08:00
都关页面了还回调?
annielong
2017-08-21 12:11:16 +08:00
服务端 session 或者 cookie,然后其他页面判断,实现是能实现,关键是看合适不合适
haitang
2017-08-21 12:13:14 +08:00
貌似应该做长连接( ws ),及时把下一步所需数据回传给后端保存,在页面关闭( ws 中断)后执行所需任务
7Brant
2017-08-21 12:28:56 +08:00
我觉着只能是 beforeunload 事件吧,如果这个符合「关闭页面时」...
66beta
2017-08-21 12:33:16 +08:00
https://developer.mozilla.org/zh-CN/docs/Web/API/Window/onbeforeunload

window.onbeforeunload = function (e) {
e = e || window.event;
// 兼容 IE8 和 Firefox 4 之前的版本
if (e) {
e.returnValue = '关闭提示';
}
// Chrome, Safari, Firefox 4+, Opera 12+ , IE 9+
return '关闭提示';
};
fishman
2017-08-21 12:41:40 +08:00
技术上实现不方便的,可以从业务层考虑。比如用户点击关闭后给用户一个提示,拖点时间,在这个过程去执行你的回调。
jin5354
2017-08-21 12:41:49 +08:00
不能,浏览器在关闭页面时只允许弹个窗提示,不允许执行其他耗时任务
autoxbc
2017-08-21 12:42:05 +08:00
如果同步数据很重要,就应该在每一次数据变动时同步,而不是在关闭页面时再同步
lerry
2017-08-21 12:46:31 +08:00
搞一个 Chrome 插件怎么样
viko16
2017-08-21 12:48:20 +08:00
https://developer.mozilla.org/en-US/docs/Web/API/Navigator/sendBeacon

虽然兼容不怎么样,但是 sendBeacon 就是为了干这个的
terrawu
2017-08-21 12:54:17 +08:00
outlook.com 之前这么干过,在天朝卡到飞起,后来取消了。
LeeSeoung
2017-08-21 14:39:33 +08:00
说目的,而不是说实现方式。。
winglight2016
2017-08-21 15:12:24 +08:00
@viko16 IE 和 Safari 都不支持,没法推广了
580a388da131
2017-08-21 17:03:35 +08:00
Windows 正在关机

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

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

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

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

© 2021 V2EX