2012-12-10 6 views
12

午前すべて私がモバイルブラウザウィンドウがフォーカスを取り戻したときに検出するために使用できるJavascriptイベントを探しています(ユーザーがブラウザを閉じる/最小化した後ホーム画面/別のアプリに戻る)、またはデバイスがスリープから再開した場合(電源をオフにするか、画面のタイムアウト後にスリープするかのいずれか)モバイルブラウザの再起動またはデバイスウェイクのJavascriptイベント

すべての機能を持つ単一のイベントを探したいと思っていますが、そうは思わないでしょう。 pageshowイベントはiOSデバイスでは機能しますが、他のすべてのデバイスで使用するためにはスケッチです。私はfocusDOMActivateを試しましたが、どちらも希望の効果がないようです。

ページには常にフォーム要素がない場合があります。ユーザーがイベントをトリガーするためにページに再度触れる必要はありません。

このようなイベントの要件は、私たちのコードがXHR要求を行うことによって定期的に新しいコンテンツをチェックすることによって発生します。ブラウザがスリープ状態になってもこれらは送信されないので、タイムアウトを再開する新しいコンテンツを取得することはありません。

ご協力いただきありがとうございます。

答えて

12

我々は同様の問題を持っていたし、それをこのような何か解決:あなたのページがアクティブである場合は、毎分を同期う

var lastSync = 0; 
var syncInterval = 60000; //sync every minute 

function syncPage() { 
    lastSync = new Date().getTime(); //set last sync to be now 
    updatePage(); //do your stuff 
} 

setInterval(function() { 
    var now = new Date().getTime(); 
    if ((now - lastSync) > syncInterval) { 
    syncPage(); 
    } 
}, 5000); //check every 5 seconds whether a minute has passed since last sync 

この道を、あなたは分を超えるためにアイドルモードでブラウザを置く場合、ブラウザを再び開いたときに同期するまで、最大で5秒が経過します。短くするとバッテリーが消耗する可能性がありますので、必要に応じてタイミングを調整してください。

+0

スマート。それが眠っていたら、lastSyncは古くなってしまい、リフレッシュしたり、(ウェブソケットを使用している場合は)プッシュするように求められますか? – oma

+1

あなたの質問が正しく理解されていれば、答えは「はい」です。 私はupdatePage()関数を呼び出す場所に何でもします。私の場合は、サーバに状態を問い合わせ、それに応じてクライアントを更新します。それらがまだ同じ状態にある場合、更新は何もしません。 – SirMarino

+0

もちろん、もちろん!恩恵のおかげで、おめでとう。 – oma

0

インターバルを超えると、ウィンドウのぼかしリスナーとウィンドウフォーカスリスナーを追加することができます。ぼかしでは、現在の時刻を記録します。フォーカスして、あなたがまだ/ sync'd /あなたが何をする必要があるにもログインしていることを確認してください。

基本的にはまったく同じことですが、ページ全体を一定の間隔で遅くするのではなく、必要なときにのみ実行されます。

更新

var $window = $(window), 
    $window.__INACTIVITY_THRESHOLD = 60000; 

$window.add(document.body); //necessary for mobile browsers 

$window.declareActivity = function() { $window.__lastEvent = new Date(); }; 

$window.blur($window.declareActivity); 
$window.focus(function(){ 
    var diff = (new Date()) - $window.__lastEvent; 
    if (diff > $window.__INACTIVITY_THRESHOLD) { 
    $window.trigger("inactivity"); 
    } 
}); 

$window.on("inactivity", "", null, function() { 
    //your inactivity code 
}); 

電話は電源をオフにして、私は私がすべての状況/モバイルデバイスでそれを信用することを知っていない場合にblurイベントは、大ざっぱようだけど。だから私は、おそらくこのような何かを投げると思います:

$(document.body).on("click scroll keyup", "", null, $window.declareActivity); 

私の非アクティブタイマーは、ユーザーが同じように十分に離れて歩くときのために働くようになっています。あなたのサイトに応じて、正確なイベントリストを調整するか、単に$ window.declareActivity()を投げることができます。ユーザー入力に応答する既存のスクリプトに追加します。

+0

ソリューションを示すサンプルコードをいくつか用意してください。 –

関連する問題