X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=src%2Fcomponents%2FConnectivityChecker.vue;h=0e724fc6d59ced9c8077bd71ca29a2ec381bae9f;hb=e274807602356d8094295888a7bb0586e7dbb4a3;hp=02cbd7fcd4c45d58888cc8f99bb88e00661c18c3;hpb=a74fa3830232f761bb66c7509e088f7468d5b619;p=github%2Fbastienwirtz%2Fhomer.git diff --git a/src/components/ConnectivityChecker.vue b/src/components/ConnectivityChecker.vue index 02cbd7f..0e724fc 100644 --- a/src/components/ConnectivityChecker.vue +++ b/src/components/ConnectivityChecker.vue @@ -17,6 +17,9 @@ export default { }; }, created: function () { + if (/t=\d+/.test(window.location.href)) { + window.history.replaceState({}, document.title, window.location.pathname); + } let that = this; this.checkOffline(); @@ -29,15 +32,46 @@ export default { }, false ); + window.addEventListener( + "online", + function () { + that.checkOffline(); + }, + false + ); + window.addEventListener( + "offline", + function () { + this.offline = true; + }, + false + ); }, methods: { checkOffline: function () { + if (!navigator.onLine) { + this.offline = true; + return; + } + + // extra check to make sure we're not offline let that = this; - return fetch(window.location.href + "?alive", { + const aliveCheckUrl = `${window.location.origin}${ + window.location.pathname + }/index.html?t=${new Date().valueOf()}`; + return fetch(aliveCheckUrl, { method: "HEAD", cache: "no-store", + redirect: "manual", }) .then(function (response) { + // opaqueredirect means request has been redirected, to auth provider probably + if ( + (response.type === "opaqueredirect" && !response.ok) || + [401, 403].indexOf(response.status) != -1 + ) { + window.location.href = aliveCheckUrl; + } that.offline = !response.ok; }) .catch(function () {