Javascript 在Chrome中显示警报()时,setTimeout()会提前触发

Javascript 在Chrome中显示警报()时,setTimeout()会提前触发,javascript,webkit,settimeout,alert,confirm,Javascript,Webkit,Settimeout,Alert,Confirm,我有以下代码: t = setTimeout(function () { blah(); }, 900000); 基本上,在页面加载15分钟后调用blah 然而,如果在某个时刻我显示了一个alert()或confirm(),那么一旦它被解除,blah()就会因为某种原因被执行 据我所知,这只发生在Safari/Chrome中。这在IE/Firefox中不会发生 你知道发生了什么,或者更好,怎么解决这个问题吗 谢谢 Daniel你确定这是原因吗,我运行了这个演示,无法复制它 “超时!”将在10

我有以下代码:

t = setTimeout(function () { blah();  }, 900000);
基本上,在页面加载15分钟后调用blah

然而,如果在某个时刻我显示了一个alert()或confirm(),那么一旦它被解除,blah()就会因为某种原因被执行

据我所知,这只发生在Safari/Chrome中。这在IE/Firefox中不会发生

你知道发生了什么,或者更好,怎么解决这个问题吗

谢谢

Daniel

你确定这是原因吗,我运行了这个演示,无法复制它

“超时!”将在10秒后出现,请在手动测试前单击框进行测试


您并不孤单,这就是问题所在:

chromium团队尚未解决此问题

我发现,通过在clearTimeout和setTimeout之间引入一些延迟,可以解决这个问题

// mouse event
document.onmousemove = function(){
  clearTimeout(timeout);
  debug("Idle Timer reinitialized"); // apparently this function introduces some delay. it just works. You may want to include another timer here like for 2-3 seconds.
  timeout = setTimeout(logoutNow, systemTimeout);
}

希望有帮助。

您确定使用
setTimeout
的函数集调用了
blah
?可能是在别的地方叫的,我没有。也许可以创建一个小页面,您可以复制这个错误,让我们试试?注意,您可以直接为setTimeout提供
blah
函数:
setTimeout(blah,900000)
@vsr:blah只在setTimeout内调用,而且从任何地方都不会只有您一人,这是错误:我已经尽可能仔细地研究了这段代码,我找不到任何其他原因。当超时过期时,我将显示某个对话框,当我关闭该对话框时,该对话框将显示。我只是在这个函数中显示这个对话框,而这个函数只是从setTimeout调用的,所以我真的找不到另一个解释。@Daniel Magliola如果它不可复制,那就很难了,你有没有在其他机器上尝试过相同的页面来排除局部问题?