我正在 Windows 7 上开发一个 Google chrome 应用程序,它是一个简单的时钟/闹钟。javascript 代码每隔一分钟调用一次 updateClock() 函数(使用计时器)以呈现新的时钟值(2:01pm >> 2:02pm >> 2:03pm >> 等)并在闹钟响起时播放 .mp3 文件到期。
如果我长时间不使用电脑,屏幕会熄灭。不过,我知道 updateClock() 函数每分钟都会被调用,因为警报会在适当的时间响起。
但是,如果我重新打开屏幕(通过移动鼠标或按下键盘),我的应用会在屏幕关闭时显示时钟值(比如下午 2:01),而当前时间可能是下午 3:30。如果我将鼠标悬停在应用程序上或再等一分钟,应用程序会更新到适当的时间(下午 3:30)。
似乎谷歌浏览器在屏幕关闭时停止渲染 HTML 页面,并且在屏幕重新打开时不会进行快速渲染。是否有 javascript 或 chrome API 解决方法可以在屏幕再次打开时快速更新时钟?
我尝试了 chrome API:
chrome.idle.onStateChanged.addListener(updateClock);
和javascript:
window.addEventListener("pageshow", updateClock, false);
但没有一个帮助。
请注意,我不想添加一个每秒触发一次的计时器来更新时钟,因为我想最小化我的应用程序所需的资源。
编辑:这是我正在使用的示例程序:
索引.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>
主.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();
}
背景.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"] }