推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
whileFalse

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

  •  
  •   whileFalse · Aug 21, 2017 · 5494 views
    This topic created in 3187 days ago, the information mentioned may be changed or developed.

    需要数秒的网络通讯

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

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

    虽然兼容不怎么样,但是 sendBeacon 就是为了干这个的
    terrawu
        17
    terrawu  
       Aug 21, 2017
    outlook.com 之前这么干过,在天朝卡到飞起,后来取消了。
    LeeSeoung
        18
    LeeSeoung  
       Aug 21, 2017
    说目的,而不是说实现方式。。
    winglight2016
        19
    winglight2016  
       Aug 21, 2017
    @viko16 IE 和 Safari 都不支持,没法推广了
    580a388da131
        20
    580a388da131  
       Aug 21, 2017
    Windows 正在关机
    liuzhedash
        21
    liuzhedash  
       Aug 21, 2017
    我只想在关闭时操作一下 localStorage,似乎也不行
    371657110
        22
    371657110  
       Aug 21, 2017
    之前分享 sendBeacon 的时候做了个 demo
    发现监听 unload 事件时候发送一个同步请求可以阻塞 unload 进程...
    所以.可以考虑下 sendBeacon
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   971 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 73ms · UTC 22:07 · PVG 06:07 · LAX 15:07 · JFK 18:07
    ♥ Do have faith in what you're doing.