1

我正在 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"] }
4

1 回答 1

2
chrome.idle.onStateChanged.addListener

应该可以工作,并且至少可以在 Mac 和 Linux 上工作。您提交的问题 244252将跟踪它在 Windows 上不起作用。

目前,您可以通过在空闲状态更改后立即更新来解决此问题,例如使用

chrome.idle.onStateChanged.addListener(function() { setTimeout(updateClock, 100); });
于 2013-06-01T00:15:50.493 回答