为什么设置的超时会因页面重新加载而失效以及如何避免?
Why are set timeouts invalidated by a page reload and how to avoid it?
我有一个网站,我使用 Javascript 自动循环导航以模仿用户的操作。
对于出现问题并且循环停止工作的情况,我有一个故障保护机制。在每次迭代中执行以下代码:
var failsafe = function () {
console.log("Something went wrong, reloading...");
window.location.reload();
document.failsafeTimeout = setTimeout(failsafe, 60000);
};
if (document.failsafeTimeout !== undefined) {
// the previous iteration went fine, clearing the old timeout
clearTimeout(document.failsafeTimeout);
}
document.failsafeTimeout = setTimeout(failsafe, 60000);
问题是,代码没有像我预期的那样工作。当循环中断时,故障安全处理程序被调用一次,但是,尽管被再次设置,但再也不会被调用。故障安全处理程序完成执行后,document.failsafeTimeout
为 undefined
。我假设 window.location.reload()
异步工作,这会在分配后破坏 failsafeTimeout
属性。
我如何重写故障安全超时处理程序,以便它可以设置一个新的超时,该超时将在页面重新加载后继续存在?
window.location.reload() 完全重新加载页面,这会中断任何 javascript 调用。
您仍然可以通过侦听 onunload 事件获得一些代码 运行,但不要期望代码在会话之间持续存在(或者您必须事先在 cookie 或 localStorage 中序列化数据)
我有一个网站,我使用 Javascript 自动循环导航以模仿用户的操作。
对于出现问题并且循环停止工作的情况,我有一个故障保护机制。在每次迭代中执行以下代码:
var failsafe = function () {
console.log("Something went wrong, reloading...");
window.location.reload();
document.failsafeTimeout = setTimeout(failsafe, 60000);
};
if (document.failsafeTimeout !== undefined) {
// the previous iteration went fine, clearing the old timeout
clearTimeout(document.failsafeTimeout);
}
document.failsafeTimeout = setTimeout(failsafe, 60000);
问题是,代码没有像我预期的那样工作。当循环中断时,故障安全处理程序被调用一次,但是,尽管被再次设置,但再也不会被调用。故障安全处理程序完成执行后,document.failsafeTimeout
为 undefined
。我假设 window.location.reload()
异步工作,这会在分配后破坏 failsafeTimeout
属性。
我如何重写故障安全超时处理程序,以便它可以设置一个新的超时,该超时将在页面重新加载后继续存在?
window.location.reload() 完全重新加载页面,这会中断任何 javascript 调用。
您仍然可以通过侦听 onunload 事件获得一些代码 运行,但不要期望代码在会话之间持续存在(或者您必须事先在 cookie 或 localStorage 中序列化数据)