[英]HTML5 audio/javascript stops working on android(google chrome) when screen is turned off
[英]Is it possible, in JavaScript, to detect when the screen is turned off in the Android & iOS browsers
我正在跟蹤我的應用程序的 javascript 報告的一些高得離譜的加載時間,並發現當窗口處於后台或顯示器關閉時,Android(和 iOS)會暫停一些 JavaScript 執行。
在 Android 上,我發現我可以使用window.onfocus
和onblur
事件來檢測應用程序何時切換到后台(並且 js 執行將很快暫停,至少對於新腳本而言),但我找不到方法檢測屏幕何時打開或關閉。 這可能嗎?
(在 Safari 上,我得到了類似的結果,只是onfocus
和onblur
不能可靠地觸發。)
我剛剛為我的用例找到了一個很好的解決方案:
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 的瀏覽器和 iOS 6.1.3 上的 Safari 上運行良好。
有幾個選項可以檢查它:
使用可見性 API
使用focus
和blur
事件來檢測瀏覽器選項卡的可見性:
window.addEventListener("focus", handleBrowserState.bind(context, true)); window.addEventListener("blur", handleBrowserState.bind(context, false)); function handleBrowserState(isActive){ // do something }
在這里找到了一個不錯的功能:
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');
});
這與 Cordova 一致,后者也觸發了resume
事件。
屏幕關閉后,您將在腳本中做什么? 無論如何,您可以注入 Java 對象( http://developer.android.com/reference/android/webkit/WebView.html#addJavascriptInterface(java.lang.Object,%20java.lang.String) )與活動交互並代理您在 JS 世界中需要的所有信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.