Spaces:
Running
Running
Create coi-serviceworker.js
Browse files- coi-serviceworker.js +39 -0
coi-serviceworker.js
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/*! coi-serviceworker v0.1.7 - By Guido Zuidhof, licensed under MIT */
|
| 2 |
+
let coepCredentialless = false;
|
| 3 |
+
if (typeof window === 'undefined') {
|
| 4 |
+
self.addEventListener("install", () => self.skipWaiting());
|
| 5 |
+
self.addEventListener("activate", (event) => event.waitUntil(self.clients.claim()));
|
| 6 |
+
self.addEventListener("message", (ev) => {
|
| 7 |
+
if (!ev.data) return;
|
| 8 |
+
if (ev.data.type === "deregister") {
|
| 9 |
+
self.registration.unregister().then(() => self.clients.matchAll().then(clients => clients.forEach(client => client.navigate(client.url))));
|
| 10 |
+
}
|
| 11 |
+
});
|
| 12 |
+
self.addEventListener("fetch", function (event) {
|
| 13 |
+
const { request } = event;
|
| 14 |
+
if (request.cache === "only-if-cached" && request.mode !== "same-origin") return;
|
| 15 |
+
event.respondWith(
|
| 16 |
+
fetch(request).then((response) => {
|
| 17 |
+
if (response.status === 0) return response;
|
| 18 |
+
const newHeaders = new Headers(response.headers);
|
| 19 |
+
newHeaders.set("Cross-Origin-Embedder-Policy", coepCredentialless ? "credentialless" : "require-corp");
|
| 20 |
+
if (!coepCredentialless) newHeaders.set("Cross-Origin-Resource-Policy", "cross-origin");
|
| 21 |
+
newHeaders.set("Cross-Origin-Opener-Policy", "same-origin");
|
| 22 |
+
return new Response(response.body, { status: response.status, statusText: response.statusText, headers: newHeaders });
|
| 23 |
+
}).catch((e) => console.error(e))
|
| 24 |
+
);
|
| 25 |
+
});
|
| 26 |
+
} else {
|
| 27 |
+
(() => {
|
| 28 |
+
const re = window.location.reload.bind(window.location);
|
| 29 |
+
const n = navigator;
|
| 30 |
+
if (n.serviceWorker && n.serviceWorker.controller) {
|
| 31 |
+
n.serviceWorker.controller.postMessage({ type: "coep_credentialless", value: coepCredentialless });
|
| 32 |
+
} else {
|
| 33 |
+
n.serviceWorker && n.serviceWorker.register(window.document.currentScript.src).then((registration) => {
|
| 34 |
+
registration.addEventListener("updatefound", () => re());
|
| 35 |
+
if (registration.active && !n.serviceWorker.controller) re();
|
| 36 |
+
});
|
| 37 |
+
}
|
| 38 |
+
})();
|
| 39 |
+
}
|