fix: Web Share Target akzeptiert mehr Feldnamen (Android Gallery Varianten)
All checks were successful
Deploy baustelle-pwa / deploy (push) Successful in 1s

Verschiedene Android-Gallery-Apps senden geteilte Bilder unter
unterschiedlichen Feldnamen — photos, file, files, image, images.
- Manifest listet jetzt alle drei Haupt-Feldnamen mit image/* accept
- Service Worker iteriert alle bekannten Keys UND macht einen Fallback
  über alle FormData-Entries für unbekannte Gallery-Apps
- Cache-Version v6 damit Browser Manifest neu liest

Wichtig: PWA muss nach diesem Update einmal deinstalliert und neu
installiert werden, damit Android das neue share_target registriert.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
[deploy]
This commit is contained in:
Eduard Wisch 2026-04-09 01:10:05 +02:00
parent 02ffdca57c
commit 391777fdb4
2 changed files with 18 additions and 3 deletions

View file

@ -20,8 +20,11 @@
"params": {
"title": "title",
"text": "text",
"url": "url",
"files": [
{ "name": "photos", "accept": ["image/jpeg", "image/png", "image/webp"] }
{ "name": "photos", "accept": ["image/*"] },
{ "name": "file", "accept": ["image/*"] },
{ "name": "files", "accept": ["image/*"] }
]
}
}

16
sw.js
View file

@ -4,7 +4,7 @@
* - API-Calls: network-first, kein offline-cache (da auth-pflichtig)
*/
const CACHE = 'baustelle-v5';
const CACHE = 'baustelle-v6';
const SHELL = [
'./',
'./index.html',
@ -23,7 +23,19 @@ const SHELL = [
// Web Share Target: eingehende POSTs an share.html abfangen und in IDB zwischenspeichern
async function handleShareTarget(request) {
const fd = await request.formData();
const files = fd.getAll('photos');
// Alle bekannten Feldnamen durchprobieren — verschiedene Android-Gallery-Apps
// nutzen unterschiedliche Namen
let files = [];
for (const key of ['photos', 'file', 'files', 'image', 'images']) {
const v = fd.getAll(key);
if (v && v.length) files = files.concat(v);
}
// Fallback: alle File-Entries im FormData durchsuchen
if (!files.length) {
for (const [k, v] of fd.entries()) {
if (v && typeof v === 'object' && v.size !== undefined) files.push(v);
}
}
if (files.length) {
const db = await new Promise((res, rej) => {
const req = indexedDB.open('baustelle-pwa-v1', 1);