Javascript Google Chrome上的setTimeout()存在奇怪的问题
我在这里搜索并找到了一个快速解决方案,可以在用户在页面上空闲时调用操作。它基本上可以在所有浏览器上正常工作 但当我在页面上使用警告或确认对话框时,谷歌Chrome就会出现奇怪的问题 警报或确认框消失(按下OK、Cancel或Cross)后,怠速功能意外工作Javascript Google Chrome上的setTimeout()存在奇怪的问题,javascript,google-chrome,settimeout,Javascript,Google Chrome,Settimeout,我在这里搜索并找到了一个快速解决方案,可以在用户在页面上空闲时调用操作。它基本上可以在所有浏览器上正常工作 但当我在页面上使用警告或确认对话框时,谷歌Chrome就会出现奇怪的问题 警报或确认框消失(按下OK、Cancel或Cross)后,怠速功能意外工作 在确认框或警报框消失后(来自链接的onclick),我立即得到了“3秒过去”框 在FF、IE和Chrome(最新)上测试。它只发生在Chrome上 我的代码在这里: 当我把这个代码放在我的页面上时,它就像一个符咒。 我打开页面,做一些鼠
- 在确认框或警报框消失后(来自链接的onclick),我立即得到了“3秒过去”框
<a onclick="if(confirm( 'Are you OK?' )) { alert('Nice.') } else { return false; };">First Link!</a>
<a onclick="alert('An alert.');" >Second Link!</a>
第一个链接!
第二个链接!
它只出现在谷歌浏览器上。有了IE和FF,一切都很好。
增加超时时间,什么都不会改变。如果您在解除警报或确认后立即收到该框,这并不奇怪,这是正常的<代码>确认和
警报
完全停止JavaScript执行。下一次对计时器的调用将排队等待解释器再次可用,因此取消显示消息的框并不让我感到惊讶。这是你看到的唯一一个有问题的行为吗?“…空闲函数出乎意料地工作。”出乎意料的是怎么回事?!?!欢迎来到StackOverflow。与其他一些站点不同,StackOverflow的目标之一是独立运行。尽一切可能像你做的那样链接到方便的实时示例,但是在你的问题中包括你正在使用的代码(这就是为什么易江为你复制了它)。链接腐烂可以很容易地发生(外部资源被删除、重命名等),此外,如果人们能够从问题本身看出问题的症结所在,就不必去其他地方。玩得开心@T.J.克劳德,基本上,绿巨人粉碎+1=D@David:…绿巨人…粉碎?我在我们的应用程序中遇到了同样的问题;每当发生警报
时,我们的计时器都会立即启动。看起来像是一个Chrome bug。问题是,如果你立即单击第二个链接,并立即关闭警报框,则会出现第二个警报框,其中包含“3秒已过”,即使你在不到3秒的时间内完成了所有操作。。。(这个评论可以理解吗?@Crowder-IE/FFX是否会在出现警报/确认框时抑制setTimeout“线程”,而Chrome只是继续“线程”?(请原谅我的懒惰——没有时间在我的机器上验证。)@Golmote:是的。增加超时时间后,不会发生任何更改。3秒只是为了测试。@DashK:他们如何实现它取决于他们,前提是当调用警报
或确认
时,没有任何其他与页面相关的JavaScript运行。@egon:我使用Chrome for Linux得到一个更奇怪的结果:如果我单击第一个链接并按Enter键关闭确认
,然后再次输入以解除警报
,我不仅会立即收到“3秒”警报,而且通过键盘解除警报会立即再次显示。只要我用键盘关闭警报,这种情况就会持续发生。如果我使用鼠标关闭“3秒”警报,则会立即停止序列(或者在几次迭代内)。你也会这样吗?
jQuery(document).ready(function() {
var idleDuration;
jQuery(document).mousemove(function() {
if (idleDuration) {
clearTimeout(idleDuration);
idleDuration = 0;
}
idleDuration = setTimeout(function() {
someIdleAction();
window.location = 'some url';
}, 3000)
})
});
<a onclick="if(confirm( 'Are you OK?' )) { alert('Nice.') } else { return false; };">First Link!</a>
<a onclick="alert('An alert.');" >Second Link!</a>