jQuery检测到移动浏览器关闭事件

时间:2020-04-21 18:58:51

标签: jquery

多年来,关于如何检测“关闭窗口”的讨论很多。对于发送分析数据(navigator.sendBeacon方法),我们特别需要此方法,该数据必须发生在离开页面的用户的最末端。 https://www.igvita.com/2015/11/20/dont-lose-user-and-app-state-use-page-visibility/上有一篇很棒的文章,提倡结合使用VisibilityState和pagehide,以涵盖台式机/移动设备的各种浏览器。这有点过时了,我们发现也有必要使用beforeunload。这是我们当前的代码,适用于以下情况:

// Chrome (desktop) - refresh, navigate away
// Chrome (mobile) - background mode
// Safari (desktop) - change tab
// Safari (mobile) - background mode
// Firefox (desktop) - refresh, navigate away, change tab, close tab
// Firefox (mobile) - background mode
$(document).on('visibilitychange', function() {
    if (document.visibilityState == 'hidden') {
        Testing();
    }
});

// Chrome (desktop) - change tab, close tab, close browser
// Safari (desktop) - refresh, close tab, close browser
// Firefox (desktop) - close browser
$(window).on('beforeunload', function() {
    Testing();  
});

// Chrome (mobile) - refresh, navigate away
// Safari (desktop) - navigate away
// Safari (mobile) - refresh, navigate away
// Firefox (mobile) - refresh, navigate away
$(window).on('pagehide', function() {
    Testing();  
});


var executed = false; 

function Testing() {

    if (!executed) {

        executed = true;

        var fd = new FormData(); 
        fd.append("action", "testing");

        var status = navigator.sendBeacon("<?php echo $_SERVER["PHP_SELF"] ?>", fd);
        console.log("sendBeacon = " + status);

    }

}

一切正常,但是特别是在iOS上,它无法检测到浏览器实际上完全关闭的情况。即用户“向上滑动”以关闭整个浏览器(无论是Chrome,Safari还是Firefox)。

是否有一个事件来检测何时在iOS上以这种方式关闭浏览器应用程序?否则,将触发一个事件,用于检测浏览器应用何时稍微“滑”入“应用切换器”模式(如果/直到用户实际从中抽出,这不会触发后台模式)。这是最后一个/唯一的出色案例,最终将使它能够正常工作!

0 个答案:

没有答案