在我们的工作中,我们使用的通信门户网站会在一段时间后注销。我的一些同事要求我提供JavaScript,以禁用自动注销功能。我所能实现的只是重置displayes计时器,但是计时器本身始终保持运行。计时器的启动方法如下:

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


如您所见,setTimeout在onLoad上调用,但是没有对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


提前致谢!

附言:那是我第一次在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()结束时,该函数将不执行任何操作。

09-07 12:53