【问题标题】:body onload setTimeout without referencebody onload setTimeout 没有参考
【发布时间】: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 jquery timer reference settimeout


【解决方案1】:

为什么不直接覆盖 javascript 函数 DsplTime() 以便它不会让您退出?

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

当间隔到了 DsplTime() 时,函数什么也不做。

【讨论】:

  • 我想到了。但是问题不是因为 DsplTime() 已经被调用 onLoad 了,所以这个覆盖太晚了吗?所以我只能覆盖理论上的第二次调用,还是我错了?
  • 好吧,要么是服务器让你退出服务器端(在这种情况下,没有多少客户端 JavaScript 会绕过它),要么是 DsplTime() 让你退出。您可以通过查看 DsplTime 的定义来检查,或者执行类似 alert(DsplTime) 之类的操作来查看函数定义,如果在其他地方找不到。
猜你喜欢
  • 1970-01-01
  • 2013-05-05
  • 1970-01-01
  • 2011-06-06
  • 1970-01-01
  • 1970-01-01
  • 2018-02-13
  • 2014-05-13
  • 1970-01-01
相关资源
最近更新 更多