PWA: serviceworker wip

This commit is contained in:
Til Schmitter 2026-06-19 22:45:37 +02:00
parent d80f3b76c5
commit 4ce26d337a
2 changed files with 38 additions and 8 deletions

View file

@ -336,6 +336,7 @@ class HttpCli(object):
"""returns true if connection can be reused""" """returns true if connection can be reused"""
self.out_headers = { self.out_headers = {
"Cache-Control": "no-store, max-age=0", "Cache-Control": "no-store, max-age=0",
"Service-Worker-Allowed": "/",
} }
if self.args.early_ban and self.is_banned(): if self.args.early_ban and self.is_banned():

View file

@ -1,10 +1,13 @@
// service worker. required for PWAs // service worker. required for PWAs
// https://www.digitalapplied.com/blog/progressive-web-apps-2026-pwa-performance-guide // https://www.digitalapplied.com/blog/progressive-web-apps-2026-pwa-performance-guide
// Register service worker on page load // Register service worker on page load
console.log('sw.js')
if ('serviceWorker' in navigator) { if ('serviceWorker' in navigator) {
console.log('sw load')
self.addEventListener("fetch", (event) => { self.addEventListener("fetch", (event) => {
// Regular requests not related to Web Share Target. // Regular requests not related to Web Share Target.
if (event.request.method !== "POST" || !event.request.action.has("share-target")) { if (event.request.method !== "POST" || !event.request.action.has("share-target")) {
console.log('normal response')
event.respondWith(fetch(event.request)); event.respondWith(fetch(event.request));
return; return;
} }
@ -12,15 +15,41 @@ if ('serviceWorker' in navigator) {
// Requests related to Web Share Target. // Requests related to Web Share Target.
event.respondWith( event.respondWith(
(async () => { (async () => {
const formData = await event.request.formData(); const formData = await event.request.formData();
const files = formData.get("files") || ""; const files = formData.get("files") || "";
const responseUrl = '/'; // (ToDo: remember last upload dir) console.log('sw share:')
// ToDo: keep file references in clipboard console.log(files)
// -> upload on paste await addResourcesToCache(files)
event.respondWith(fetch(event.request));
alert(files); // const responseUrl = '/'; // (ToDo: remember last upload dir)
return; // 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);
// 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);
};
} }