我在这里搜索并找到了一个快速的解决方案,当用户在页面上空闲时调用一个动作。它基本上适用于所有浏览器。
但是当我在页面上使用提醒或确认对话框时,Google Chrome上会出现奇怪的问题。
警报或确认框消失后(按“确定”,“取消”或“交叉”),空闲功能意外工作。
在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一切都很好。 增加超时,没有任何变化。
答案 0 :(得分:1)
如果您在解除警报或确认后立即收到此框,那并不奇怪,这是正常的。 confirm
和alert
完全停止JavaScript执行。对计时器的下一次调用将排队等待解释器再次可用,因此解除显示该消息的框并不会让我感到惊讶。这是你看到的唯一一个有问题的行为吗?