diff --git a/index.html b/index.html index f088a91ac9..7fe77016f1 100644 --- a/index.html +++ b/index.html @@ -30,7 +30,41 @@ window.onload = function() { document.body.innerHTML = "The application failed to load, missing file: " - + fileRef; + + fileRef; + + // The whole complex part below implements page reloads with + // "exponential backoff". The retry attempt is passes as + // "rCounter" query parameter + var href = window.location.href; + + var retryMatch = href.match(/.+(\?|&)rCounter=(\d+)/); + var retryCountStr = retryMatch ? retryMatch[2] : "0"; + var retryCount = Number.parseInt(retryCountStr); + + if (retryMatch == null) { + var separator = href.indexOf("?") === -1 ? "?" : "&"; + var hashIdx = href.indexOf("#"); + + if (hashIdx === -1) { + href += separator + "rCounter=1"; + } else { + var hashPart = href.substr(hashIdx); + + href = href.substr(0, hashIdx) + + separator + "rCounter=1" + hashPart; + } + } else { + var separator = retryMatch[1]; + + href = href.replace( + /(\?|&)rCounter=(\d+)/, + separator + "rCounter=" + (retryCount + 1)); + } + + var delay = Math.pow(2, retryCount) * 2000; + + window.setTimeout( + function () { window.location.replace(href); }, delay); }; window.removeEventListener( 'error', loadErrHandler, true /* capture phase */);