javascript - Google Chrome 上 setTimeout() 的奇怪问题

标签 javascript google-chrome settimeout

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

但是当我在页面上使用警告或确认对话框时,谷歌浏览器出现了奇怪的问题。

警告或确认框消失后(按 OK、Cancel 或 Cross),idle 功能意外工作。

  • 在来自链接点击的框确认或警告框消失后,我立即得到“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>

看来我的解释还不够:/

我用 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)
    })
});

当我将此代码放在我的页面上时。它就像一个魅力。 我打开页面,是否进行一些鼠标操作,然后 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>

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

最佳答案

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

关于javascript - Google Chrome 上 setTimeout() 的奇怪问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3787105/

相关文章:

javascript - SQL 语句中单引号替换的正则表达式

javascript - 谷歌浏览器无法在新标签页中打开 blob

css - Android UI 遮挡了 Chrome `position:fixed; bottom: 0;`

javascript - 使用 Protractor 进行 Chrome 仿真测试的有效设备名称是什么?

javascript - 有人可以调试我的 Javascript 小程序中的进度条问题吗?

javascript - 我需要在 JavaScript 中使用 setTimeout 停止循环

javascript - JavaScript 返回确认

javascript - 在 jquery 中替换字符串中多次出现的多个子字符串

使用 setTimeOut 的 Javascript 流控制

javascript - 如何撤消 preventDefault();在触摸移动?