Google Chrome上的setTimeout()出现了奇怪的问题

ego*_*gon 8 javascript google-chrome settimeout

我在这里搜索并找到了一个快速的解决方案,当用户在页面上空闲时调用一个动作.它基本上适用于所有浏览器.

但是当我在页面上使用警报或确认对话框时,Google Chrome上会出现奇怪的问题.

警报或确认框消失后(按下"确定","取消"或"交叉"),空闲功能意外工作.

  • 在框中确认或警告框消失后,从链接的onclick,我得到'3秒通过'框立即

在FF,IE和Chrome上测试(最新).它只发生在Chrome上.

我的代码在这里:http: //jsbin.com/ifule3

  window.onload = idleTimer;
  function idleTimer() {
    var idleDuration;
    document.onmousemove = idleReset;
    function  idleReset() {
      if (idleDuration) {
        clearTimeout(idleDuration);
        idleDuration = 0;
      }
      idleDuration = setTimeout(function() {
        alert('3 seconds passed.');
      }, 3000)
    }
  };

<a onclick="if(confirm( '?' )) { alert('Ok Pressed.') } else { return false; };">First Link!</a>
<a onclick="alert('test');" >Second Link!</a>
Run Code Online (Sandbox Code Playgroud)

看来我的解释还不够:/

我用jQuery改变了代码;

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)
    })
});
Run Code Online (Sandbox Code Playgroud)

当我把这个代码放在我的页面上时.它就像一个魅力.我打开页面,做一些鼠标操作,然后3秒钟没有移动鼠标,我得到了空闲警报.这就是我需要的.

当我放置一个简单地调用警告框并单击它的链接时,会出现警告框.然后我关上盒子,我得到了"3秒钟通过"的空闲警报.

    <a onclick="if(confirm( 'Are you OK?' )) { alert('Nice.') } else { return false; };">First Link!</a>
    <a onclick="alert('An alert.');" >Second Link!</a>
Run Code Online (Sandbox Code Playgroud)

它只发生在谷歌浏览器上.使用IE和FF一切都很好.增加超时,没有任何变化.

T.J*_*der 1

如果您在消除警报或确认后立即收到盒子,这并不奇怪,这是正常的。confirmalert完全停止 JavaScript 执行。对计时器的下一次调用将排队等待解释器再次可用,因此关闭显示消息的框并不令我感到惊讶。这是您看到的唯一有问题的行为吗?