私は、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
プロパティが割り当てられた後に破棄されると仮定します。
フェールセーフタイムアウトハンドラを書き直して、ページの再ロード時に新しいタイムアウトを設定できるようにするにはどうすればよいですか?
location.reload()すべてのjavascript呼び出しを破棄するページを完全にリロードします。 onunloadイベントでコードを実行することはできますが、セッション間でコードが保持されることはありません(あらかじめクッキーやlocalStorageのデータをシリアル化しておく必要があります)。 –
@RegisPortalez、すべて、説明してくれてありがとうございます。 – Semisonic
は私のコメントから答えを出しました –