シンプルな時計/アラームである Windows 7 で Google chrome アプリを開発しています。JavaScript コードは、(タイマーを使用して) updateClock() 関数を 1 分ごとに呼び出して、新しいクロック値 (2:01pm >> 2:02pm >> 2:03pm >> など) をレンダリングし、アラームが発生したときに .mp3 ファイルを再生します。によるものである。
PCを長時間使わないと画面が消えます。それでも、適切な時間にアラームが鳴るので、updateClock() 関数が毎分呼び出されていることはわかっています。
ただし、(マウスを動かすかキーボードを押すことによって) 画面をオンに戻すと、現在の時刻が午後 3 時 30 分であるのに対し、アプリは画面がオフになったとき (たとえば午後 2 時 1 分) の時計の値を表示します。マウスをアプリの上に置くか、さらに 1 分待つと、アプリは適切な時刻 (午後 3 時 30 分) に更新されます。
Google chrome は、画面がオフのときに HTML ページのレンダリングを停止し、画面が再びオンになったときにクイック レンダリングを行わないようです。画面が再びオンになったときに時計をすばやく更新するためのJavaScriptまたはChrome APIの回避策はありますか?
私はクロムAPIを試しました:
chrome.idle.onStateChanged.addListener(updateClock);
そしてJavaScript:
window.addEventListener("pageshow", updateClock, false);
しかし、誰も助けませんでした。
アプリに必要なリソースを最小限に抑えたいので、毎秒起動してクロックを更新するタイマーを追加したくないことに注意してください。
編集:これが私が取り組んでいるサンプルプログラムです:
index.html:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8"/>
<script type="text/javascript" src="main.js" ></script>
</head>
<body>
<span id="hhDisplay" ></span>:<span id="mmDisplay" ></span>
</body>
</html>
main.js:
function updateClock() {
var date = new Date();
hhDisplay.innerHTML = date.getHours();
mmDisplay.innerHTML = date.getMinutes();
var minuteOffset = ((60 - date.getSeconds()) * 1000) - date.getMilliseconds();
if (minuteOffset > 0)
setTimeout(updateClock, minuteOffset);
else
updateClock();
}
window.onload = function() {
chrome.idle.onStateChanged.addListener(function(newstate) { updateClock(); });
updateClock();
}
background.js
chrome.app.runtime.onLaunched.addListener(function() {
chrome.app.window.create("index.html",
{ id: "TestClock", minWidth: 400, minHeight: 300 }); });
マニフェスト.json
{ "name": "Clock Test", "version": "1.0",
"manifest_version": 2,
"minimum_chrome_version": "18",
"app": { "background": { "scripts": ["background.js"] } },
"permissions": ["idle"] }