From 5a33c4cd8a5350802d28373658d033193ab5c616 Mon Sep 17 00:00:00 2001 From: Til Schmitter Date: Sun, 21 Jun 2026 10:39:49 +0200 Subject: [PATCH] IE fixes --- copyparty/web/browser.js | 3 +- copyparty/web/sw.js | 92 ++++++++++++++++++++-------------------- copyparty/web/util.js | 83 +++++++++++++++++++----------------- 3 files changed, 91 insertions(+), 87 deletions(-) diff --git a/copyparty/web/browser.js b/copyparty/web/browser.js index e83370a5..c8f7a01f 100644 --- a/copyparty/web/browser.js +++ b/copyparty/web/browser.js @@ -33,7 +33,8 @@ function jsldp(a, b) { } loadScript('baguettebox', "J_BBX"); loadScript('up2k', "J_U2K"); -loadScript('sw'); +if (navigator.serviceWorker) + loadScript('sw'); // disables emojis diff --git a/copyparty/web/sw.js b/copyparty/web/sw.js index cdd012c6..6a1d85fa 100644 --- a/copyparty/web/sw.js +++ b/copyparty/web/sw.js @@ -1,55 +1,53 @@ // service worker. required for PWAs // https://www.digitalapplied.com/blog/progressive-web-apps-2026-pwa-performance-guide // Register service worker on page load -console.log('sw.js') -if ('serviceWorker' in navigator) { - console.log('sw load') - self.addEventListener("fetch", (event) => { - // Regular requests not related to Web Share Target. - if (event.request.method !== "POST" || !event.request.action.has("share-target")) { - console.log('normal response') - event.respondWith(fetch(event.request)); - return; - } +// modern syntax allowed here, only supported browsers load this file +console.log('sw load') +self.addEventListener("fetch", (event) => { + // Regular requests not related to Web Share Target. + if (event.request.method !== "POST" || !event.request.action.has("share-target")) { + console.log('normal response') + event.respondWith(fetch(event.request)); + return; + } - // Requests related to Web Share Target. - event.respondWith( - (async () => { - const formData = await event.request.formData(); - const files = formData.get("files") || ""; - console.log('sw share:') - console.log(files) - await addResourcesToCache(files) + // Requests related to Web Share Target. + event.respondWith( + (async () => { + const formData = await event.request.formData(); + const files = formData.get("files") || ""; + console.log('sw share:') + console.log(files) + await addResourcesToCache(files) - // const responseUrl = '/'; // (ToDo: remember last upload dir) - // ToDo: keep file references in clipboard - // (maybe read from cache on page load somehow) - // -> upload on paste + // const responseUrl = '/'; // (ToDo: remember last upload dir) + // ToDo: keep file references in clipboard + // (maybe read from cache on page load somehow) + // -> upload on paste - // Copy existing headers - const headers = new Headers(event.request.headers); + // Copy existing headers + const headers = new Headers(event.request.headers); - // Set a new header - var pw = await CookieStore.get('cppwd'); - headers.set('pw', pw); - - headers.delete('origin'); // 99% sure this doesn't work, but hey + // Set a new header + var pw = await CookieStore.get('cppwd'); + headers.set('pw', pw); + + headers.delete('origin'); // 99% sure this doesn't work, but hey - const newRequest = new Request(event.request, { - mode: 'cors', - credentials: 'omit', - headers: headers - }) - return fetch(newRequest) - })(), - ); - }); - self.addEventListener('install', (event) => { - console.log('sw wait skip') - self.skipWaiting(); // insta replace old service workers (helpful for dev) - }); - const addResourcesToCache = async (resources) => { - const cache = await caches.open("files"); - await cache.addAll(resources); - }; -} \ No newline at end of file + const newRequest = new Request(event.request, { + mode: 'cors', + credentials: 'omit', + headers: headers + }) + return fetch(newRequest) + })(), + ); +}); +self.addEventListener('install', (event) => { + console.log('sw wait skip') + self.skipWaiting(); // insta replace old service workers (helpful for dev) +}); +const addResourcesToCache = async (resources) => { + const cache = await caches.open("files"); + await cache.addAll(resources); +}; \ No newline at end of file diff --git a/copyparty/web/util.js b/copyparty/web/util.js index f4b661ab..7fd6b765 100644 --- a/copyparty/web/util.js +++ b/copyparty/web/util.js @@ -2362,16 +2362,19 @@ function setColor (color) { pbar.drawpos(); vbar.draw(); } -var accent = sread('accent'); + +var accent = ""; +if(sread != undefined) + accent = sread('accent'); var tcolor = QS('meta[name=theme-color]'); if(tcolor) tcolor = tcolor.content; if((!accent || accent.length <= 3) && tcolor != "#333333") - accent = tcolor; + accent = tcolor; var thing = QS('meta[name=theme-color]'); if(accent && accent.length > 3){ - console.log('read accent color from settings: ' + accent); - document.documentElement.style.setProperty('--a', parseColor(accent)); + console.log('read accent color from settings: ' + accent); + document.documentElement.style.setProperty('--a', parseColor(accent)); } function bchrome() { @@ -2448,42 +2451,44 @@ function xhrchk(xhr, prefix, e404, lvl, tag) { return fun(0, prefix + xhr.status + ": " + errtxt, tag); } -// register service worker -// ToDo: set http header: Service-Worker-Allowed: / -// otherwise it will fail to register -// https://stackoverflow.com/questions/49084718/how-exactly-add-service-worker-allowed-to-register-service-worker-scope-in-upp -window.addEventListener('load', async () => { - try { - const registration = await navigator.serviceWorker.register("/.cpr/w/sw.js", { - scope: "/", - }); - if (registration.installing) { - console.log("Service worker installing"); - } else if (registration.waiting) { - console.log("Service worker installed"); - } else if (registration.active) { - console.log("Service worker active"); - } - } catch (error) { - console.error(`Registration failed with ${error}`); - } -}); - -if(ebi('inst')){ - var installPrompt = null; - window.addEventListener("beforeinstallprompt", function(e) { - e.preventDefault(); - installPrompt = e; - ebi('inst').removeAttribute("hidden"); - }); - ebi('inst').onclick = async function(){ - if (!installPrompt) { - return; +if (navigator.serviceWorker){ + // register service worker + // ToDo: set http header: Service-Worker-Allowed: / + // otherwise it will fail to register + // https://stackoverflow.com/questions/49084718/how-exactly-add-service-worker-allowed-to-register-service-worker-scope-in-upp + window.addEventListener('load', function() { + try { + var registration = navigator.serviceWorker.register("/.cpr/w/sw.js", { + scope: "/", + }); + if (registration.installing) { + console.log("Service worker installing"); + } else if (registration.waiting) { + console.log("Service worker installed"); + } else if (registration.active) { + console.log("Service worker active"); + } + } catch (error) { + console.error("Registration failed with " + error); + } + }); + + if(ebi('inst')){ + var installPrompt = null; + window.addEventListener("beforeinstallprompt", function(e) { + e.preventDefault(); + installPrompt = e; + ebi('inst').removeAttribute("hidden"); + }); + ebi('inst').onclick = function(){ + if (!installPrompt) { + return; + } + var result = installPrompt.prompt(); + console.log("Install prompt was: " + result.outcome); + installPrompt = null; + ebi('inst').setAttribute("hidden", ""); } - const result = await installPrompt.prompt(); - console.log(`Install prompt was: ${result.outcome}`); - installPrompt = null; - ebi('inst').setAttribute("hidden", ""); } }