2016-05-10 11 views
0

私は、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.failsafeTimeoutundefinedになります。 window.location.reload()は非同期に動作し、failsafeTimeoutプロパティが割り当てられた後に破棄されると仮定します。

フェールセーフタイムアウトハンドラを書き直して、ページの再ロード時に新しいタイムアウトを設定できるようにするにはどうすればよいですか?

+2

location.reload()すべてのjavascript呼び出しを破棄するページを完全にリロードします。 onunloadイベントでコードを実行することはできますが、セッション間でコードが保持されることはありません(あらかじめクッキーやlocalStorageのデータをシリアル化しておく必要があります)。 –

+0

@RegisPortalez、すべて、説明してくれてありがとうございます。 – Semisonic

+0

は私のコメントから答えを出しました –

答えて

1

window.location.reload()はページ全体を再読み込みし、JavaScriptの呼び出しをすべて破棄します。

あなたはまだonunloadイベントを聞くことによって実行されるコードのビットを持つことができますが、コードは、セッション間で保持することを期待していない(または、あなたが事前にクッキーやのlocalStorageにデータをシリアル化する必要がある)

関連する問題