hantech commited on
Commit
dfee815
·
verified ·
1 Parent(s): 2c662eb

Create coi-serviceworker.js

Browse files
Files changed (1) hide show
  1. 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
+ }