0

接続が切断されたときにリロードを試みるには、次のものが必要です。

setInterval(window.location.reload(), 1000);

これに関する私の懸念は、それが永遠に続く可能性があり、私のアプリケーションを ddos​​ することです。

上記を更新して、あきらめて壊れる前に最大20回試行するにはどうすればよいですか?

ありがとうございました

4

3 に答える 3

2

これは私が汚れているように感じますが、更新するたびにウィンドウハッシュを更新/抽出できます:

function hack () {
  var last = parseInt(location.hash.slice(1));
  if (last < 20) {
    window.location.hash = last + 1;
    window.location.reload();
  }
}

window.location.hash = 0;
setTimeout(hack, 1000);
于 2012-04-17T00:06:14.673 に答える
1

あるページの読み込みから次のページの読み込みまで、いくつかのカウンターの状態を維持する必要があります。これにより、20 回のリロードがいつ行われたかを知ることができます。オプションは次のとおりです。

  1. ハッシュ値
  2. クエリ パラメータ
  3. クッキー値
  4. ローカルストレージに保存されているもの

このページのリロード以外にこの値を保持する必要がない場合は、オプション 1) と 2) の方が適しています。必要なだけ保持されるからです。ハッシュ値はサーバーに送信されませんが、ハッシュ値の他の使用を妨げる可能性があります。クエリ パラメーターはサーバーに送信されますが、適切なサーバーは、それが認識していないクエリ値を無視し、他に干渉することはありません。私はおそらくクエリ パラメータを選択し、実際にそれを使用して、コードの一部で無限のリダイレクト ループを回避したことがあります。オプション 2) を次のように実装できます。

function checkAutoReload() {
    var currentCnt = 0;
    var re = /(\?|&)(reloadCnt=)(\d+)/;
    var param = window.location.search.match(re), newURL;
    if (param) {
        currentCnt = parseInt(param[3], 10);
        newURL = window.location.href.replace(re, "$1$2" + (currentCnt + 1))
    } else {
        newURL = window.location.href;
        newURL += window.location.search ? "&" : "?";
        newURL += "reloadCnt=1";
    }
    if (currentCnt < 20) {
        window.location.replace(newURL);
    }
}

setTimeout(checkAutoReload, 1000);

setInterval()特定のページのコードは、リロードする前、またはリロードが完了したことを検出する前に一度だけ実行されるため、 aは必要ないことに注意してください。

于 2012-04-17T00:25:23.697 に答える
0

reloadCountをlocalStorageに保存します

MDNDOMストレージ

    var maxReload = 20;
    var reloadPage = function() {
        if (typeof a !== "undefined" && a !== null) {
            console.log(localStorage.reloadCount);
            localStorage.reloadCount = 0;
        };
        var reloadCount = parseInt(localStorage.reloadCount, 10);
        console.log(reloadCount);
        if (reloadCount < maxReload) {
            reloadCount += 1;
            localStorage.reloadCount = reloadCount;

            // RELOAD CODE HERE
        };
    };

    // call reloadPage from your code
    reloadPage();
于 2012-04-17T00:37:56.750 に答える