【发布时间】:2018-01-17 07:37:35
【问题描述】:
在我们的工作中,我们使用了一个会在一段时间后退出的通信门户。我的一些同事要求我提供一个禁用自动注销的 javascript。我所能做的就是重置显示计时器,但计时器本身仍会继续运行。以下是计时器的启动方式:
<body class='asam_body' onLoad='window.setTimeout("DsplTime()",1);' >
如您所见,在 onLoad 时调用了 setTimeout,但没有对 setTimeout 调用的引用,所以我不能使用 clearTimeout() 函数。我也尝试从我的脚本中调用 DsplTime() ,但这仍然不会停止计时器。我发现的所有内容都不适用于我的案例,所以我在两个小时后放弃了搜索。 有没有办法影响这个服务器端的身体定义,例如由
- 覆盖 onLoad(尝试使用 @document-start)
- 替换字符串以定义正文本身(我猜是因为服务器提供了该字符串,当该行存在时,我的脚本注入为时已晚)
- 以追溯方式获取对 setTiming-Object 的引用
这是我相当没用的方法,它只会重置显示的时间:
setInterval(CalcTime, 130000);
setInterval(resetStart, 130000);
setInterval(DsplTime, 130000);
//resetStart and CalcTime are prefined functions,
// without any impact on the timer itself, unfortunately
提前致谢!
P.S.:那是我第一次在 stackoverflow 上问问题,所以我希望,我问得恰当:)
编辑:
我尝试了Cancel all Javascript's setTimeouts and setIntervals 的蛮力方法,使用
for (var i = 1; i < 99999; i++) {
window.clearInterval(i);
window.clearTimeout(i);
window.mozCancelAnimationFrame(i); // Firefox
}
但在相同的时间后我仍然退出。
此代码片段会导致 1440 分钟后注销:
if (absSec >= 1440)
{
document.location.href = "../project/auth/logout.php";
}
这是上面提到的 DsplTime() 函数的一部分。有没有办法操纵这个函数,而不是阻止它的调用? absSec 超出范围,所以我无法更改它的值(我认为这无论如何都无济于事?
编辑 2:
所以我可以设法停止计时器
// @run-at document-start
//...
var highestTimeoutId = setTimeout(";");
for (var i = 0 ; i < highestTimeoutId ; i++) {
window.clearTimeout(i);
// window.alert(i);
}
不幸的是,该脚本只能时不时地工作(在大约 80% 的页面加载中)。另外,这不会给服务器带来很多负载吗?我不想被屏蔽...
【问题讨论】:
-
什么将 JavaScript 添加到 onLoad 属性?你不能把这个去掉吗?
-
如果您没有任何其他设置间隔或超时,那么您可以使用,stackoverflow.com/questions/11374131/…
-
不清楚定时器是什么,有定时器的代码吗?
-
计时器是指 window.setTimoute 调用,最终导致注销。还是你的意思是 DsplTime() 代码?
标签: javascript jquery timer reference settimeout