gpt4 book ai didi

javascript - body onload setTimeout 无引用

转载 作者:行者123 更新时间:2023-12-01 05:17:13 25 4
gpt4 key购买 nike

在我们的工作中,我们使用的通信门户会在一段时间后退出。我的一些同事向我索要 JavaScript,以禁用自动注销。我所能实现的就是重置显示计时器,但计时器本身仍然在运行。以下是计时器的启动方式:

<body class='asam_body' onLoad='window.setTimeout("DsplTime()",1);' >

如您所见,setTimeout 在 onLoad 时被调用,但没有对 setTimeout 调用的引用,因此我无法使用clearTimeout() 函数。我还尝试从脚本中调用 DsplTime(),但这仍然无法停止计时器。我发现的所有内容都不适用于我的情况,所以两个小时后我放弃了搜索。有什么方法可以影响这个服务器端主体定义,例如通过

  • 覆盖 onLoad(尝试使用 @document-start)
  • 替换正文本身定义的字符串(我猜是因为服务器提供了该字符串,当该行存在时,我的脚本注入(inject)已经太晚了)
  • 追溯获取对 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 函数 DsplTime() 以便它不会将您注销?

转到调试控制台并输入类似 DsplTime = new function(){}

当间隔达到并且 DsplTime() 时,该函数将不执行任何操作。

关于javascript - body onload setTimeout 无引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48295862/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com