屏幕重新开启后,快速更新Chrome App窗口

时间:2013-05-25 01:12:48

标签: javascript windows google-chrome-app

我正在Windows 7上开发一个Google Chrome应用程序,这是一个简单的时钟/闹钟。 javascript代码每隔一分钟调用updateClock()函数(使用计时器)来呈现新的时钟值(下午2:01>>>>>>>> 2:03 pm>>&etc;等)并播放报警到期时.mp3文件。

如果我长时间不使用电脑,屏幕会熄灭。不过,我知道updateClock()函数每分钟都会被调用,因为警报会在适当的时间响起。

但是,如果我重新打开屏幕(通过移动鼠标或按键盘),我的应用程序会在屏幕关闭时显示时钟值(比如下午2:01),而当前时间可能是下午3:30 。如果我将鼠标悬停在应用程序上或等待一分钟,应用程序将更新到适当的时间(下午3:30)。

似乎Google Chrome停止在屏幕关闭时呈现HTML页面,而在屏幕重新启动时不会快速呈现。当屏幕再次打开时,是否有javascript或chrome API解决方法来快速更新时钟?

我尝试了chrome 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 }); });

的manifest.json

{ "name": "Clock Test", "version": "1.0",
"manifest_version": 2,
"minimum_chrome_version": "18",
"app": { "background": {  "scripts": ["background.js"] } },
"permissions": ["idle"] }

1 个答案:

答案 0 :(得分:2)

chrome.idle.onStateChanged.addListener

应该可行,至少在Mac和Linux上有用。您提交的issue 244252将跟踪它无法在Windows上运行。

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

chrome.idle.onStateChanged.addListener(function() { setTimeout(updateClock, 100); });