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

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

  •  
  •   whileFalse · 34 天前 · 1519 次点击
    这是一个创建于 34 天前的主题,其中的信息可能已经有所发展或是发生改变。

    需要数秒的网络通讯

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

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

    虽然兼容不怎么样,但是 sendBeacon 就是为了干这个的
        17
    terrawu   34 天前
    outlook.com 之前这么干过,在天朝卡到飞起,后来取消了。
        18
    LeeSeoung   34 天前
    说目的,而不是说实现方式。。
        19
    winglight2016   34 天前
    @viko16 IE 和 Safari 都不支持,没法推广了
        20
    580a388da131   34 天前
    Windows 正在关机
        21
    liuzhedash   34 天前
    我只想在关闭时操作一下 localStorage,似乎也不行
        22
    371657110   34 天前
    之前分享 sendBeacon 的时候做了个 demo
    发现监听 unload 事件时候发送一个同步请求可以阻塞 unload 进程...
    所以.可以考虑下 sendBeacon
    DigitalOcean
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   鸣谢   ·   627 人在线   最高记录 3541   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.7.5 · 50ms · UTC 23:01 · PVG 07:01 · LAX 16:01 · JFK 19:01
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1