JS 能否在关闭页面时执行一个较长时间的回调 - V2EX
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 5108 次点击
    这是一个创建于 2973 天前的主题,其中的信息可能已经有所发展或是发生改变。

    需要数秒的网络通讯

    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     Solana     884 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 21:43 PVG 05:43 LAX 14:43 JFK 17:43
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86