V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
whileFalse
V2EX  ›  JavaScript

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

  •  
  •   whileFalse · 2017-08-21 10:37:23 +08:00 · 4378 次点击
    这是一个创建于 2412 天前的主题,其中的信息可能已经有所发展或是发生改变。

    需要数秒的网络通讯

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

    @shyling #3 能详细说说嘛?
    jugelizi
        7
    jugelizi  
       2017-08-21 12:06:10 +08:00
    都关页面了还回调?
    annielong
        8
    annielong  
       2017-08-21 12:11:16 +08:00
    服务端 session 或者 cookie,然后其他页面判断,实现是能实现,关键是看合适不合适
    haitang
        9
    haitang  
       2017-08-21 12:13:14 +08:00
    貌似应该做长连接( ws ),及时把下一步所需数据回传给后端保存,在页面关闭( ws 中断)后执行所需任务
    7Brant
        10
    7Brant  
       2017-08-21 12:28:56 +08:00 via iPhone
    我觉着只能是 beforeunload 事件吧,如果这个符合「关闭页面时」...
    66beta
        11
    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
        12
    fishman  
       2017-08-21 12:41:40 +08:00 via Android
    技术上实现不方便的,可以从业务层考虑。比如用户点击关闭后给用户一个提示,拖点时间,在这个过程去执行你的回调。
    jin5354
        13
    jin5354  
       2017-08-21 12:41:49 +08:00
    不能,浏览器在关闭页面时只允许弹个窗提示,不允许执行其他耗时任务
    autoxbc
        14
    autoxbc  
       2017-08-21 12:42:05 +08:00
    如果同步数据很重要,就应该在每一次数据变动时同步,而不是在关闭页面时再同步
    lerry
        15
    lerry  
       2017-08-21 12:46:31 +08:00
    搞一个 Chrome 插件怎么样
    viko16
        16
    viko16  
       2017-08-21 12:48:20 +08:00   ❤️ 2
    https://developer.mozilla.org/en-US/docs/Web/API/Navigator/sendBeacon

    虽然兼容不怎么样,但是 sendBeacon 就是为了干这个的
    terrawu
        17
    terrawu  
       2017-08-21 12:54:17 +08:00
    outlook.com 之前这么干过,在天朝卡到飞起,后来取消了。
    LeeSeoung
        18
    LeeSeoung  
       2017-08-21 14:39:33 +08:00
    说目的,而不是说实现方式。。
    winglight2016
        19
    winglight2016  
       2017-08-21 15:12:24 +08:00
    @viko16 IE 和 Safari 都不支持,没法推广了
    580a388da131
        20
    580a388da131  
       2017-08-21 17:03:35 +08:00
    Windows 正在关机
    liuzhedash
        21
    liuzhedash  
       2017-08-21 17:37:08 +08:00
    我只想在关闭时操作一下 localStorage,似乎也不行
    371657110
        22
    371657110  
       2017-08-21 18:09:01 +08:00
    之前分享 sendBeacon 的时候做了个 demo
    发现监听 unload 事件时候发送一个同步请求可以阻塞 unload 进程...
    所以.可以考虑下 sendBeacon
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2874 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 13:05 · PVG 21:05 · LAX 06:05 · JFK 09:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.