我正在制作Chrome应用程序,并希望在全屏模式下使用简单的时钟(因此我无法看到Windows时钟)。我认为我是微不足道的,因为javascript具有在屏幕上打印出当前日期的所有功能。我也用纯javascript(我的意思是在www应用程序而不是打包的应用程序)。当我想调用setTimeout()函数时出现问题 - chrome不允许我这样做并用语言警告我:
拒绝将字符串评估为JavaScript,因为'unsafe-eval'是 以下内容安全性中不允许使用脚本源 策略指令:“default-src'self'blob:filesystem: chrome-extension-resource:“。注意'script-src'没有明确表示 设置,所以'default-src'用作后备。
我的代码如下所示:
function display () {
this.currentTimeTxt = "TIME: ";
this.getCurrentTime = function () {
var time = new Date()
if ( time.getHours() < 10 ) { var hours = '0' + time.getHours() } else { var hours = time.getHours() }
if ( time.getMinutes() < 10 ) { var minutes = '0' + time.getMinutes() } else { var minutes = time.getMinutes() }
if ( time.getSeconds() < 10 ) { var seconds = '0' + time.getSeconds() } else { var seconds = time.getSeconds() }
return hours + ':' + minutes + ':' + seconds;
}
}
var display = new display();
setTimeout(console.log(display.getCurrentTime), 1000)
在Chrome打包应用程序中,每秒钟“滴答滴答”的正确方法是什么?
Kalreg
----编辑代码:
function display(){
this.currentTimeTxt = "TIME: ";
this.getCurrentTime = function () {
var time = new Date()
if ( time.getHours() < 10 ) { var hours = '0' + time.getHours() } else { var hours = time.getHours() }
if ( time.getMinutes() < 10 ) { var minutes = '0' + time.getMinutes() } else { var minutes = time.getMinutes() }
if ( time.getSeconds() < 10 ) { var seconds = '0' + time.getSeconds() } else { var seconds = time.getSeconds() }
setTimeout(function () { display.getCurrentTime} ), 1000)
return hours + ':' + minutes + ':' + seconds;
}
}
var display = new display();
display.getCurrentTime()
答案 0 :(得分:2)
首先,您需要setInterval
,而不是setTimeout
。 setTimeout
仅在指定的延迟后执行一次,而setInterval
每隔一段时间执行一次。
setInterval
和setTimeout
都采用字符串(eval
&#39; d,通常是不良做法)或函数。 console.log
的返回值不是其中之一。并且console.log
需要display.getCurrentTime
的返回值,而不是函数本身,所以请记住包含括号。
所以你只需要传入一个获取当前时间的函数,然后记录它。
传递setInterval
(或setTimeout
)匿名函数是很常见的,如下所示:
setInterval(function(){
console.log(display.getCurrentTime());
}, 1000);
答案 1 :(得分:1)
而不是setTimeout(), 鼓励chrome.alarm API使用。