Sichtbarer "App installieren"-Knopf statt versteckter Browser-Funktion

Nutzer-Report: "ich kann sie immer noch nicht runter laden" -- Manifest +
Service Worker reichen technisch fuer Installierbarkeit, aber ohne
sichtbaren Knopf muss man wissen, dass Chrome/Edge das Adressleisten-
Symbol/3-Punkte-Meny dafuer versteckt. Jetzt: echter Knopf im Footer
("Als App installieren", jede Seite) und in der Verwaltung-Session-Leiste
("Als eigene App installieren"), nutzt beforeinstallprompt + prompt() --
loest pro Seite automatisch mit GENAU dem Manifest aus, das diese Seite
selbst verlinkt (index.html -> manifest.json, verwaltung.html ->
manifest-verwaltung.json), kein Sonderfall-Code noetig. Bleibt unsichtbar,
wenn der Browser das nicht unterstuetzt (Safari/iOS) oder die Seite schon
als App laeuft.

Ausserdem: eigener apple-mobile-web-app-title fuer verwaltung.html
("DogiCrew-Verwaltung" statt generisch "DogFather" beim iOS-Home-Bildschirm).

Cache-Busting-Version (?v=) erneut hochgezaehlt (20260820 -> 20260820b),
da main.js sich durch diese Aenderung erneut geaendert hat.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
2026-08-20 19:30:42 +02:00
co-authored by Claude Opus 5
parent 4173e43c78
commit 7099d80491
36 changed files with 279 additions and 232 deletions
+9 -9
View File
@@ -16,10 +16,10 @@
<meta name="twitter:card" content="summary_large_image" />
<meta name="robots" content="noindex" /> <!-- generische URL, echte Team-Seiten verlinken hierher -->
<link rel="stylesheet" href="assets/css/main.css?v=20260820" />
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260820" />
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260820" />
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260820" />
<link rel="stylesheet" href="assets/css/main.css?v=20260820b" />
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=20260820b" />
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=20260820b" />
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=20260820b" />
<style>
.profil-photo { aspect-ratio: 4/5; max-width: 420px; margin: 0 auto; }
.profil-photo img { width: 100%; height: 100%; object-fit: cover; display: block; }
@@ -130,11 +130,11 @@
</main>
<div id="site-footer"></div>
<script src="assets/js/data-modis.js?v=20260820"></script>
<script src="assets/js/data-scouts.js?v=20260820"></script>
<script src="assets/js/data-creator.js?v=20260820"></script>
<script src="assets/js/i18n-profil.js?v=20260820"></script>
<script src="assets/js/main.js?v=20260820"></script>
<script src="assets/js/data-modis.js?v=20260820b"></script>
<script src="assets/js/data-scouts.js?v=20260820b"></script>
<script src="assets/js/data-creator.js?v=20260820b"></script>
<script src="assets/js/i18n-profil.js?v=20260820b"></script>
<script src="assets/js/main.js?v=20260820b"></script>
<script>
document.addEventListener("DOMContentLoaded", () => {
const slug = new URLSearchParams(location.search).get("p") || "";