Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法在一定时间间隔后设置document.title_Javascript - Fatal编程技术网

Javascript 无法在一定时间间隔后设置document.title

Javascript 无法在一定时间间隔后设置document.title,javascript,Javascript,当应用程序在选项卡中打开且该选项卡处于非活动状态时,我将调用blinktab()。选项卡需要闪烁标题2分钟,然后出现超时消息。同时,如果选项卡获得焦点,则应清除超时。有些人说我无法在safari中看到标题的更新。但当我使用document.title签入控制台时,我会看到更新的标题 function blinkTab(message) { console.debug("In BlinkTab...."); var startTime = new Date().getTime()

当应用程序在选项卡中打开且该选项卡处于非活动状态时,我将调用blinktab()。选项卡需要闪烁标题2分钟,然后出现超时消息。同时,如果选项卡获得焦点,则应清除超时。有些人说我无法在safari中看到标题的更新。但当我使用document.title签入控制台时,我会看到更新的标题

function  blinkTab(message) {
    console.debug("In BlinkTab....");
    var startTime = new Date().getTime();
    var interval = setInterval(function(){
        if(new Date().getTime() - startTime > 120000){
            clearInterval(interval);
            return;
        }
        document.title = document.title == message ? ' ' : message;
    }, 300);
    setTimeout(function(){ 
        document.title = 'timed out.';
    }, 120100)
试试这个:

var start_blinking = false;
var startTime, message;


blinkTab("message");

var interval = setInterval(function(){
  if(!start_blinking){
    return;
  }
  document.title = document.title == message ? ' ' : message;
  if(new Date().getTime() - startTime > 2000){
    document.title = 'timed out.';
    console.log("done");
    start_blinking = false; //done blinking
    clearInterval(interval);
    return;
  }

}, 300);


function  blinkTab(message) {
    console.debug("In BlinkTab....");
    startTime = new Date().getTime();
        start_blinking = true;
    message = message;
}

你能解释一下你改变了什么以及为什么吗?我把setInterval放在一个全局范围内,因为如果你把它放在一个函数中,函数一结束它就会被销毁。表示解释器是否到达函数的}。setTimeout也一样。您应该在回答中解释,注释是暂时的。它不需要在全局范围内,因为对
clearInterval()
的调用在同一范围内。变量保存在闭包中。