在chrome app中制作时钟 - setTimeout()返回错误

时间:2016-01-17 23:47:51

标签: javascript time google-chrome-extension google-chrome-app

我正在制作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()

2 个答案:

答案 0 :(得分:2)

首先,您需要setInterval,而不是setTimeoutsetTimeout仅在指定的延迟后执行一次,而setInterval每隔一段时间执行一次。

setIntervalsetTimeout都采用字符串(eval&#39; d,通常是不良做法)或函数。 console.log的返回值不是其中之一。并且console.log需要display.getCurrentTime的返回值,而不是函数本身,所以请记住包含括号。

所以你只需要传入一个获取当前时间的函数,然后记录它。

传递setInterval(或setTimeout)匿名函数是很常见的,如下所示:

setInterval(function(){
    console.log(display.getCurrentTime());
}, 1000);

答案 1 :(得分:1)

而不是setTimeout(),  鼓励chrome.alarm API使用。