是否有可能,在JavaScript中,以检测当屏幕在Android和iOS浏览器中关闭(Is it

2019-08-22 02:50发布

我是跟踪我的应用程序的JavaScript报告,发现的Android(和iOS)暂停一些JavaScript执行时窗口是在后台或显示器关闭一些高的离谱的加载时间。

在Android上,我发现我可以使用window.onfocusonblur事件,当应用程序被切换到后台(和js的执行将很快停下来,至少对于新脚本)来检测,但我不能找到一种方法当屏幕被接通或断开来检测。 这可能吗?

(在Safari上,我除了相似的结果onfocusonblur没有可靠的火。)

Answer 1:

有几个选项来检查它:

  1. 使用权限API

  2. 使用focusblur事件,以检测浏览器选项卡中的知名度:

window.addEventListener("focus", handleBrowserState.bind(context, true));
window.addEventListener("blur", handleBrowserState.bind(context, false));

function handleBrowserState(isActive){
    // do something
}
  1. 使用计时器,如上所述


Answer 2:

我才发现我的使用情况相当不错的解决方案:

function getTime() {
    return (new Date()).getTime();
}

var lastInterval = getTime();

function intervalHeartbeat() {
    var now = getTime();
    var diff = now - lastInterval;
    var offBy = diff - 1000; // 1000 = the 1 second delay I was expecting
    lastInterval = now;

    if(offBy > 100) { // don't trigger on small stutters less than 100ms
        console.log('interval heartbeat - off by ' + offBy + 'ms');
    }
}

setInterval(intervalHeartbeat, 1000);

当屏幕被关闭(或JS暂停由于任何原因),则下一个时间间隔被延迟,直到JS恢复执行。 在我的代码,我可以通过调整定时器offBy量,并呼吁它好。

在快速测试,这似乎在同时在Android 4.2.2的浏览器和Safari浏览器在iOS 6.1.3很好地工作。



Answer 3:

在这里找到了一个不错的功能:

http://rakaz.nl/2009/09/iphone-webapps-101-detecting-essential-information-about-your-iphone.html

(function() {
    var timestamp = new Date().getTime();

    function checkResume() {
        var current = new Date().getTime();
        if (current - timestamp > 4000) {
            var event = document.createEvent("Events");
            event.initEvent("resume", true, true);
            document.dispatchEvent(event);
        }
        timestamp = current;
    }

    window.setInterval(checkResume, 1000);
})();   

要对事件进行注册:

addEventListener("resume", function() {
    alert('Resuming this webapp');
});

这是科尔多瓦这也激发了一致的resume情况。



Answer 4:

你会在你的脚本做,一旦你现在在屏幕关闭? 好吧,无论如何,你可以注入Java对象( http://developer.android.com/reference/android/webkit/WebView.html#addJavascriptInterface(java.lang.Object,%20java.lang.String) )与该活动界面和代理你在JS世界需要的所有信息。



文章来源: Is it possible, in JavaScript, to detect when the screen is turned off in the Android & iOS browsers