Jquery обнаружение события закрытия мобильного браузера - PullRequest
0 голосов
/ 21 апреля 2020

В течение многих лет велись громкие дискуссии о том, как обнаружить «закрытое окно». Это необходимо нам специально для отправки аналитических данных (подход navigator.sendBeacon), которые обязательно должны происходить в самом конце пользователя, покидающего страницу. В https://www.igvita.com/2015/11/20/dont-lose-user-and-app-state-use-page-visibility/ есть отличная статья, в которой предлагается использовать комбинацию VisibilityState и pagehide, чтобы охватить различные браузеры, как для настольных компьютеров, так и для мобильных устройств. Это немного устарело, и мы посчитали необходимым использовать и до загрузки. Вот наш текущий код, работающий для перечисленных случаев:

// 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 ? Или, если не так, событие, которое определяет, когда приложение браузера слегка «сдвинулось» в режим «переключения приложений» (появляется, что это НЕ запускает фоновый режим, если / пока пользователь фактически не коснется этого). Это последний / единственный выдающийся случай, который наконец позволил бы этому работать!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...