old build workable on web again
This commit is contained in:
parent
3b2a9ca04c
commit
d7ad1a7a34
6 changed files with 441 additions and 0 deletions
146
02/coi-serviceworker.js
Normal file
146
02/coi-serviceworker.js
Normal file
|
|
@ -0,0 +1,146 @@
|
||||||
|
/*! coi-serviceworker v0.1.7 - Guido Zuidhof and contributors, licensed under MIT */
|
||||||
|
let coepCredentialless = false;
|
||||||
|
if (typeof window === 'undefined') {
|
||||||
|
self.addEventListener("install", () => self.skipWaiting());
|
||||||
|
self.addEventListener("activate", (event) => event.waitUntil(self.clients.claim()));
|
||||||
|
|
||||||
|
self.addEventListener("message", (ev) => {
|
||||||
|
if (!ev.data) {
|
||||||
|
return;
|
||||||
|
} else if (ev.data.type === "deregister") {
|
||||||
|
self.registration
|
||||||
|
.unregister()
|
||||||
|
.then(() => {
|
||||||
|
return self.clients.matchAll();
|
||||||
|
})
|
||||||
|
.then(clients => {
|
||||||
|
clients.forEach((client) => client.navigate(client.url));
|
||||||
|
});
|
||||||
|
} else if (ev.data.type === "coepCredentialless") {
|
||||||
|
coepCredentialless = ev.data.value;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
self.addEventListener("fetch", function (event) {
|
||||||
|
const r = event.request;
|
||||||
|
if (r.cache === "only-if-cached" && r.mode !== "same-origin") {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const request = (coepCredentialless && r.mode === "no-cors")
|
||||||
|
? new Request(r, {
|
||||||
|
credentials: "omit",
|
||||||
|
})
|
||||||
|
: r;
|
||||||
|
event.respondWith(
|
||||||
|
fetch(request)
|
||||||
|
.then((response) => {
|
||||||
|
if (response.status === 0) {
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
|
||||||
|
const newHeaders = new Headers(response.headers);
|
||||||
|
newHeaders.set("Cross-Origin-Embedder-Policy",
|
||||||
|
coepCredentialless ? "credentialless" : "require-corp"
|
||||||
|
);
|
||||||
|
if (!coepCredentialless) {
|
||||||
|
newHeaders.set("Cross-Origin-Resource-Policy", "cross-origin");
|
||||||
|
}
|
||||||
|
newHeaders.set("Cross-Origin-Opener-Policy", "same-origin");
|
||||||
|
|
||||||
|
return new Response(response.body, {
|
||||||
|
status: response.status,
|
||||||
|
statusText: response.statusText,
|
||||||
|
headers: newHeaders,
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.catch((e) => console.error(e))
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
} else {
|
||||||
|
(() => {
|
||||||
|
const reloadedBySelf = window.sessionStorage.getItem("coiReloadedBySelf");
|
||||||
|
window.sessionStorage.removeItem("coiReloadedBySelf");
|
||||||
|
const coepDegrading = (reloadedBySelf == "coepdegrade");
|
||||||
|
|
||||||
|
// You can customize the behavior of this script through a global `coi` variable.
|
||||||
|
const coi = {
|
||||||
|
shouldRegister: () => !reloadedBySelf,
|
||||||
|
shouldDeregister: () => false,
|
||||||
|
coepCredentialless: () => true,
|
||||||
|
coepDegrade: () => true,
|
||||||
|
doReload: () => window.location.reload(),
|
||||||
|
quiet: false,
|
||||||
|
...window.coi
|
||||||
|
};
|
||||||
|
|
||||||
|
const n = navigator;
|
||||||
|
const controlling = n.serviceWorker && n.serviceWorker.controller;
|
||||||
|
|
||||||
|
// Record the failure if the page is served by serviceWorker.
|
||||||
|
if (controlling && !window.crossOriginIsolated) {
|
||||||
|
window.sessionStorage.setItem("coiCoepHasFailed", "true");
|
||||||
|
}
|
||||||
|
const coepHasFailed = window.sessionStorage.getItem("coiCoepHasFailed");
|
||||||
|
|
||||||
|
if (controlling) {
|
||||||
|
// Reload only on the first failure.
|
||||||
|
const reloadToDegrade = coi.coepDegrade() && !(
|
||||||
|
coepDegrading || window.crossOriginIsolated
|
||||||
|
);
|
||||||
|
n.serviceWorker.controller.postMessage({
|
||||||
|
type: "coepCredentialless",
|
||||||
|
value: (reloadToDegrade || coepHasFailed && coi.coepDegrade())
|
||||||
|
? false
|
||||||
|
: coi.coepCredentialless(),
|
||||||
|
});
|
||||||
|
if (reloadToDegrade) {
|
||||||
|
!coi.quiet && console.log("Reloading page to degrade COEP.");
|
||||||
|
window.sessionStorage.setItem("coiReloadedBySelf", "coepdegrade");
|
||||||
|
coi.doReload("coepdegrade");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (coi.shouldDeregister()) {
|
||||||
|
n.serviceWorker.controller.postMessage({ type: "deregister" });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// If we're already coi: do nothing. Perhaps it's due to this script doing its job, or COOP/COEP are
|
||||||
|
// already set from the origin server. Also if the browser has no notion of crossOriginIsolated, just give up here.
|
||||||
|
if (window.crossOriginIsolated !== false || !coi.shouldRegister()) return;
|
||||||
|
|
||||||
|
if (!window.isSecureContext) {
|
||||||
|
!coi.quiet && console.log("COOP/COEP Service Worker not registered, a secure context is required.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// In some environments (e.g. Firefox private mode) this won't be available
|
||||||
|
if (!n.serviceWorker) {
|
||||||
|
!coi.quiet && console.error("COOP/COEP Service Worker not registered, perhaps due to private mode.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
n.serviceWorker.register(window.document.currentScript.src).then(
|
||||||
|
(registration) => {
|
||||||
|
!coi.quiet && console.log("COOP/COEP Service Worker registered", registration.scope);
|
||||||
|
|
||||||
|
registration.addEventListener("updatefound", () => {
|
||||||
|
!coi.quiet && console.log("Reloading page to make use of updated COOP/COEP Service Worker.");
|
||||||
|
window.sessionStorage.setItem("coiReloadedBySelf", "updatefound");
|
||||||
|
coi.doReload();
|
||||||
|
});
|
||||||
|
|
||||||
|
// If the registration is active, but it's not controlling the page
|
||||||
|
if (registration.active && !n.serviceWorker.controller) {
|
||||||
|
!coi.quiet && console.log("Reloading page to make use of COOP/COEP Service Worker.");
|
||||||
|
window.sessionStorage.setItem("coiReloadedBySelf", "notcontrolling");
|
||||||
|
coi.doReload();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
(err) => {
|
||||||
|
!coi.quiet && console.error("COOP/COEP Service Worker failed to register:", err);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
})();
|
||||||
|
}
|
||||||
|
|
@ -114,6 +114,7 @@ body {
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
<script src="coi-serviceworker.js"></script>
|
||||||
<canvas id="canvas">
|
<canvas id="canvas">
|
||||||
HTML5 canvas appears to be unsupported in the current browser.<br >
|
HTML5 canvas appears to be unsupported in the current browser.<br >
|
||||||
Please try updating or use a different browser.
|
Please try updating or use a different browser.
|
||||||
|
|
|
||||||
146
03/coi-serviceworker.js
Normal file
146
03/coi-serviceworker.js
Normal file
|
|
@ -0,0 +1,146 @@
|
||||||
|
/*! coi-serviceworker v0.1.7 - Guido Zuidhof and contributors, licensed under MIT */
|
||||||
|
let coepCredentialless = false;
|
||||||
|
if (typeof window === 'undefined') {
|
||||||
|
self.addEventListener("install", () => self.skipWaiting());
|
||||||
|
self.addEventListener("activate", (event) => event.waitUntil(self.clients.claim()));
|
||||||
|
|
||||||
|
self.addEventListener("message", (ev) => {
|
||||||
|
if (!ev.data) {
|
||||||
|
return;
|
||||||
|
} else if (ev.data.type === "deregister") {
|
||||||
|
self.registration
|
||||||
|
.unregister()
|
||||||
|
.then(() => {
|
||||||
|
return self.clients.matchAll();
|
||||||
|
})
|
||||||
|
.then(clients => {
|
||||||
|
clients.forEach((client) => client.navigate(client.url));
|
||||||
|
});
|
||||||
|
} else if (ev.data.type === "coepCredentialless") {
|
||||||
|
coepCredentialless = ev.data.value;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
self.addEventListener("fetch", function (event) {
|
||||||
|
const r = event.request;
|
||||||
|
if (r.cache === "only-if-cached" && r.mode !== "same-origin") {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const request = (coepCredentialless && r.mode === "no-cors")
|
||||||
|
? new Request(r, {
|
||||||
|
credentials: "omit",
|
||||||
|
})
|
||||||
|
: r;
|
||||||
|
event.respondWith(
|
||||||
|
fetch(request)
|
||||||
|
.then((response) => {
|
||||||
|
if (response.status === 0) {
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
|
||||||
|
const newHeaders = new Headers(response.headers);
|
||||||
|
newHeaders.set("Cross-Origin-Embedder-Policy",
|
||||||
|
coepCredentialless ? "credentialless" : "require-corp"
|
||||||
|
);
|
||||||
|
if (!coepCredentialless) {
|
||||||
|
newHeaders.set("Cross-Origin-Resource-Policy", "cross-origin");
|
||||||
|
}
|
||||||
|
newHeaders.set("Cross-Origin-Opener-Policy", "same-origin");
|
||||||
|
|
||||||
|
return new Response(response.body, {
|
||||||
|
status: response.status,
|
||||||
|
statusText: response.statusText,
|
||||||
|
headers: newHeaders,
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.catch((e) => console.error(e))
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
} else {
|
||||||
|
(() => {
|
||||||
|
const reloadedBySelf = window.sessionStorage.getItem("coiReloadedBySelf");
|
||||||
|
window.sessionStorage.removeItem("coiReloadedBySelf");
|
||||||
|
const coepDegrading = (reloadedBySelf == "coepdegrade");
|
||||||
|
|
||||||
|
// You can customize the behavior of this script through a global `coi` variable.
|
||||||
|
const coi = {
|
||||||
|
shouldRegister: () => !reloadedBySelf,
|
||||||
|
shouldDeregister: () => false,
|
||||||
|
coepCredentialless: () => true,
|
||||||
|
coepDegrade: () => true,
|
||||||
|
doReload: () => window.location.reload(),
|
||||||
|
quiet: false,
|
||||||
|
...window.coi
|
||||||
|
};
|
||||||
|
|
||||||
|
const n = navigator;
|
||||||
|
const controlling = n.serviceWorker && n.serviceWorker.controller;
|
||||||
|
|
||||||
|
// Record the failure if the page is served by serviceWorker.
|
||||||
|
if (controlling && !window.crossOriginIsolated) {
|
||||||
|
window.sessionStorage.setItem("coiCoepHasFailed", "true");
|
||||||
|
}
|
||||||
|
const coepHasFailed = window.sessionStorage.getItem("coiCoepHasFailed");
|
||||||
|
|
||||||
|
if (controlling) {
|
||||||
|
// Reload only on the first failure.
|
||||||
|
const reloadToDegrade = coi.coepDegrade() && !(
|
||||||
|
coepDegrading || window.crossOriginIsolated
|
||||||
|
);
|
||||||
|
n.serviceWorker.controller.postMessage({
|
||||||
|
type: "coepCredentialless",
|
||||||
|
value: (reloadToDegrade || coepHasFailed && coi.coepDegrade())
|
||||||
|
? false
|
||||||
|
: coi.coepCredentialless(),
|
||||||
|
});
|
||||||
|
if (reloadToDegrade) {
|
||||||
|
!coi.quiet && console.log("Reloading page to degrade COEP.");
|
||||||
|
window.sessionStorage.setItem("coiReloadedBySelf", "coepdegrade");
|
||||||
|
coi.doReload("coepdegrade");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (coi.shouldDeregister()) {
|
||||||
|
n.serviceWorker.controller.postMessage({ type: "deregister" });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// If we're already coi: do nothing. Perhaps it's due to this script doing its job, or COOP/COEP are
|
||||||
|
// already set from the origin server. Also if the browser has no notion of crossOriginIsolated, just give up here.
|
||||||
|
if (window.crossOriginIsolated !== false || !coi.shouldRegister()) return;
|
||||||
|
|
||||||
|
if (!window.isSecureContext) {
|
||||||
|
!coi.quiet && console.log("COOP/COEP Service Worker not registered, a secure context is required.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// In some environments (e.g. Firefox private mode) this won't be available
|
||||||
|
if (!n.serviceWorker) {
|
||||||
|
!coi.quiet && console.error("COOP/COEP Service Worker not registered, perhaps due to private mode.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
n.serviceWorker.register(window.document.currentScript.src).then(
|
||||||
|
(registration) => {
|
||||||
|
!coi.quiet && console.log("COOP/COEP Service Worker registered", registration.scope);
|
||||||
|
|
||||||
|
registration.addEventListener("updatefound", () => {
|
||||||
|
!coi.quiet && console.log("Reloading page to make use of updated COOP/COEP Service Worker.");
|
||||||
|
window.sessionStorage.setItem("coiReloadedBySelf", "updatefound");
|
||||||
|
coi.doReload();
|
||||||
|
});
|
||||||
|
|
||||||
|
// If the registration is active, but it's not controlling the page
|
||||||
|
if (registration.active && !n.serviceWorker.controller) {
|
||||||
|
!coi.quiet && console.log("Reloading page to make use of COOP/COEP Service Worker.");
|
||||||
|
window.sessionStorage.setItem("coiReloadedBySelf", "notcontrolling");
|
||||||
|
coi.doReload();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
(err) => {
|
||||||
|
!coi.quiet && console.error("COOP/COEP Service Worker failed to register:", err);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
})();
|
||||||
|
}
|
||||||
|
|
@ -114,6 +114,7 @@ body {
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
<script src="coi-serviceworker.js"></script>
|
||||||
<canvas id="canvas">
|
<canvas id="canvas">
|
||||||
HTML5 canvas appears to be unsupported in the current browser.<br >
|
HTML5 canvas appears to be unsupported in the current browser.<br >
|
||||||
Please try updating or use a different browser.
|
Please try updating or use a different browser.
|
||||||
|
|
|
||||||
146
04/coi-serviceworker.js
Normal file
146
04/coi-serviceworker.js
Normal file
|
|
@ -0,0 +1,146 @@
|
||||||
|
/*! coi-serviceworker v0.1.7 - Guido Zuidhof and contributors, licensed under MIT */
|
||||||
|
let coepCredentialless = false;
|
||||||
|
if (typeof window === 'undefined') {
|
||||||
|
self.addEventListener("install", () => self.skipWaiting());
|
||||||
|
self.addEventListener("activate", (event) => event.waitUntil(self.clients.claim()));
|
||||||
|
|
||||||
|
self.addEventListener("message", (ev) => {
|
||||||
|
if (!ev.data) {
|
||||||
|
return;
|
||||||
|
} else if (ev.data.type === "deregister") {
|
||||||
|
self.registration
|
||||||
|
.unregister()
|
||||||
|
.then(() => {
|
||||||
|
return self.clients.matchAll();
|
||||||
|
})
|
||||||
|
.then(clients => {
|
||||||
|
clients.forEach((client) => client.navigate(client.url));
|
||||||
|
});
|
||||||
|
} else if (ev.data.type === "coepCredentialless") {
|
||||||
|
coepCredentialless = ev.data.value;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
self.addEventListener("fetch", function (event) {
|
||||||
|
const r = event.request;
|
||||||
|
if (r.cache === "only-if-cached" && r.mode !== "same-origin") {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const request = (coepCredentialless && r.mode === "no-cors")
|
||||||
|
? new Request(r, {
|
||||||
|
credentials: "omit",
|
||||||
|
})
|
||||||
|
: r;
|
||||||
|
event.respondWith(
|
||||||
|
fetch(request)
|
||||||
|
.then((response) => {
|
||||||
|
if (response.status === 0) {
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
|
||||||
|
const newHeaders = new Headers(response.headers);
|
||||||
|
newHeaders.set("Cross-Origin-Embedder-Policy",
|
||||||
|
coepCredentialless ? "credentialless" : "require-corp"
|
||||||
|
);
|
||||||
|
if (!coepCredentialless) {
|
||||||
|
newHeaders.set("Cross-Origin-Resource-Policy", "cross-origin");
|
||||||
|
}
|
||||||
|
newHeaders.set("Cross-Origin-Opener-Policy", "same-origin");
|
||||||
|
|
||||||
|
return new Response(response.body, {
|
||||||
|
status: response.status,
|
||||||
|
statusText: response.statusText,
|
||||||
|
headers: newHeaders,
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.catch((e) => console.error(e))
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
} else {
|
||||||
|
(() => {
|
||||||
|
const reloadedBySelf = window.sessionStorage.getItem("coiReloadedBySelf");
|
||||||
|
window.sessionStorage.removeItem("coiReloadedBySelf");
|
||||||
|
const coepDegrading = (reloadedBySelf == "coepdegrade");
|
||||||
|
|
||||||
|
// You can customize the behavior of this script through a global `coi` variable.
|
||||||
|
const coi = {
|
||||||
|
shouldRegister: () => !reloadedBySelf,
|
||||||
|
shouldDeregister: () => false,
|
||||||
|
coepCredentialless: () => true,
|
||||||
|
coepDegrade: () => true,
|
||||||
|
doReload: () => window.location.reload(),
|
||||||
|
quiet: false,
|
||||||
|
...window.coi
|
||||||
|
};
|
||||||
|
|
||||||
|
const n = navigator;
|
||||||
|
const controlling = n.serviceWorker && n.serviceWorker.controller;
|
||||||
|
|
||||||
|
// Record the failure if the page is served by serviceWorker.
|
||||||
|
if (controlling && !window.crossOriginIsolated) {
|
||||||
|
window.sessionStorage.setItem("coiCoepHasFailed", "true");
|
||||||
|
}
|
||||||
|
const coepHasFailed = window.sessionStorage.getItem("coiCoepHasFailed");
|
||||||
|
|
||||||
|
if (controlling) {
|
||||||
|
// Reload only on the first failure.
|
||||||
|
const reloadToDegrade = coi.coepDegrade() && !(
|
||||||
|
coepDegrading || window.crossOriginIsolated
|
||||||
|
);
|
||||||
|
n.serviceWorker.controller.postMessage({
|
||||||
|
type: "coepCredentialless",
|
||||||
|
value: (reloadToDegrade || coepHasFailed && coi.coepDegrade())
|
||||||
|
? false
|
||||||
|
: coi.coepCredentialless(),
|
||||||
|
});
|
||||||
|
if (reloadToDegrade) {
|
||||||
|
!coi.quiet && console.log("Reloading page to degrade COEP.");
|
||||||
|
window.sessionStorage.setItem("coiReloadedBySelf", "coepdegrade");
|
||||||
|
coi.doReload("coepdegrade");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (coi.shouldDeregister()) {
|
||||||
|
n.serviceWorker.controller.postMessage({ type: "deregister" });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// If we're already coi: do nothing. Perhaps it's due to this script doing its job, or COOP/COEP are
|
||||||
|
// already set from the origin server. Also if the browser has no notion of crossOriginIsolated, just give up here.
|
||||||
|
if (window.crossOriginIsolated !== false || !coi.shouldRegister()) return;
|
||||||
|
|
||||||
|
if (!window.isSecureContext) {
|
||||||
|
!coi.quiet && console.log("COOP/COEP Service Worker not registered, a secure context is required.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// In some environments (e.g. Firefox private mode) this won't be available
|
||||||
|
if (!n.serviceWorker) {
|
||||||
|
!coi.quiet && console.error("COOP/COEP Service Worker not registered, perhaps due to private mode.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
n.serviceWorker.register(window.document.currentScript.src).then(
|
||||||
|
(registration) => {
|
||||||
|
!coi.quiet && console.log("COOP/COEP Service Worker registered", registration.scope);
|
||||||
|
|
||||||
|
registration.addEventListener("updatefound", () => {
|
||||||
|
!coi.quiet && console.log("Reloading page to make use of updated COOP/COEP Service Worker.");
|
||||||
|
window.sessionStorage.setItem("coiReloadedBySelf", "updatefound");
|
||||||
|
coi.doReload();
|
||||||
|
});
|
||||||
|
|
||||||
|
// If the registration is active, but it's not controlling the page
|
||||||
|
if (registration.active && !n.serviceWorker.controller) {
|
||||||
|
!coi.quiet && console.log("Reloading page to make use of COOP/COEP Service Worker.");
|
||||||
|
window.sessionStorage.setItem("coiReloadedBySelf", "notcontrolling");
|
||||||
|
coi.doReload();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
(err) => {
|
||||||
|
!coi.quiet && console.error("COOP/COEP Service Worker failed to register:", err);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
})();
|
||||||
|
}
|
||||||
|
|
@ -95,6 +95,7 @@ body {
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
<script src="coi-serviceworker.js"></script>
|
||||||
<canvas id="canvas">
|
<canvas id="canvas">
|
||||||
Your browser does not support the canvas tag.
|
Your browser does not support the canvas tag.
|
||||||
</canvas>
|
</canvas>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue