コンピューターの「ウェイクアップ」イベントがブラウザーに伝搬され、JavaScript APIで使用できればいいのですが。このようなものが実装されているかどうか誰かが知っていますか?
これを行う直接的な方法はわかりませんが、いつ発生するかを把握する1つの方法は、たとえば2秒ごとに実行され、最後に実行された時刻を保存するsetIntervalタスクを設定することです。次に、最後に実行された時間が2秒よりもかなり古いかどうかを確認します。
var lastTime = (new Date()).getTime();
setInterval(function() {
var currentTime = (new Date()).getTime();
if (currentTime > (lastTime + 2000*2)) { // ignore small delays
// Probably just woke up!
}
lastTime = currentTime;
}, 2000);
上記のメソッドで発生する可能性のある問題の1つは、警告ボックスまたは他のモーダルタイプのウィンドウがJSの実行を一時停止し、誤ったウェイクアップ表示を引き起こす可能性があることです。この問題を解決する1つの方法は、Webワーカーを使用することです(新しいブラウザーでサポートされています)。
var myWorker = new Worker("DetectWakeup.js");
myWorker.onmessage = function (ev) {
if (ev && ev.data === 'wakeup') {
// wakeup here
}
}
// DetectWakeup.js (put in a separate file)
var lastTime = (new Date()).getTime();
var checkInterval = 10000;
setInterval(function () {
var currentTime = (new Date()).getTime();
if (currentTime > (lastTime + checkInterval * 2)) { // ignore small delays
postMessage("wakeup");
}
lastTime = currentTime;
}, checkInterval);
これは少し時代遅れですが、Andrew Muの回答に基づいて、それを行うための簡単なJQueryプラグインを作成しました: https://bitbucket.org/paul.okopny/jquery.wakeup-plugin/wiki/ホーム
使い方は簡単です:
$.wakeUp(function(sleep_time) {
alert("I have slept for " + sleep_time/1000 + " seconds")
});
これが将来誰かを助けることを願っています。
他の人による非常に良い答えと説明は別として、online
、offline
イベントにも依存できます。 online
が実際にオンラインであるかどうかはさておき、通常、このイベントは、ユーザーのマシンが実際のインターネット切断とは別にスリープ状態から戻ったときにもトリガーされます。
したがって、理想的な解決策は、タイマーチェックをオンラインイベントとオフラインイベントと組み合わせることです。
var lastTime = (new Date()).getTime();
setInterval(function() {
var currentTime = (new Date()).getTime();
if (currentTime > (lastTime + 2000*2)) { // ignore small delays
setTimeout(function() {
//enter code here, it will run after wake up
}, 2000);
}
lastTime = currentTime;
}, 2000);