serviceWorker.jsExporte: register, unregister
// Dadurch wird die App bei späteren Besuchen in der Produktion schneller geladen und erhält
// Offline-Fähigkeiten. Es bedeutet jedoch auch, dass Entwickler (und Benutzer)
// bereitgestellte Updates erst bei späteren Besuchen einer Seite sehen, nachdem alle
// vorhandenen Tabs der Seite geschlossen wurden, da zuvor zwischengespeicherte
// Ressourcen im Hintergrund aktualisiert werden.
// Weitere Informationen zu den Vorteilen dieses Modells und zur
// Aktivierung finden Sie unter http://bit.ly/CRA-PWA
const isLocalhost = Boolean(
window.location.hostname === 'localhost' ||
// [::1] ist die IPv6-Localhost-Adresse.
window.location.hostname === '[::1]' ||
// 127.0.0.1/8 gilt als Localhost für IPv4.
window.location.hostname.match(
/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/
)
);
export function register(config) {
if (import.meta.env.PROD && 'serviceWorker' in navigator) {
const publicUrl = new URL(import.meta.env.BASE_URL, window.location.href);
if (publicUrl.origin !== window.location.origin) {
return;
}
window.addEventListener('load', () => {
const swUrl = `${import.meta.env.BASE_URL}service-worker.js`;
if (isLocalhost) {
// Dies läuft auf localhost. Prüfen wir, ob ein Service Worker existiert oder nicht.
checkValidServiceWorker(swUrl, config);
// Fügt zusätzliches Logging für localhost hinzu, das Entwickler auf die
// Service-Worker/PWA-Dokumentation hinweist.
navigator.serviceWorker.ready.then(() => {
console.log(
'Diese Web-App wird cache-first von einem Service Worker ' +
'ausgeliefert. Weitere Informationen unter http://bit.ly/CRA-PWA'
);
});
} else {
// Ist nicht localhost. Einfach Service Worker registrieren
registerValidSW(swUrl, config);
}
});
}
}
function registerValidSW(swUrl, config) {
navigator.serviceWorker
.register(swUrl)
.then(registration => {
registration.onupdatefound = () => {
const installingWorker = registration.installing;
if (installingWorker == null) {
return;
}
installingWorker.onstatechange = () => {
if (installingWorker.state === 'installed') {
if (navigator.serviceWorker.controller) {
// An diesem Punkt wurden die aktualisierten vorab zwischengespeicherten Inhalte abgerufen,
// aber der vorherige Service Worker wird weiterhin die älteren Inhalte ausliefern,
// bis alle Client-Tabs geschlossen sind.
console.log(
'Neue Inhalte sind verfügbar und werden verwendet, wenn alle ' +
'Tabs dieser Seite geschlossen sind. Siehe http://bit.ly/CRA-PWA.'
);
// Callback ausführen
if (config && config.onUpdate) {
config.onUpdate(registration);
}
} else {
// An diesem Punkt wurde alles vorab zwischengespeichert.
// Es ist der perfekte Zeitpunkt, um eine
// "Inhalt ist für die Offline-Nutzung zwischengespeichert."-Nachricht anzuzeigen.
console.log('Inhalt ist für die Offline-Nutzung zwischengespeichert.');
// Callback ausführen
if (config && config.onSuccess) {
config.onSuccess(registration);
}
}
}
};
};
})
.catch(error => {
console.error('Fehler bei der Service-Worker-Registrierung:', error);
});
}
function checkValidServiceWorker(swUrl, config) {
// Prüft, ob der Service Worker gefunden werden kann. Wenn nicht, Seite neu laden.
fetch(swUrl)
.then(response => {
// Sicherstellen, dass der Service Worker existiert und wir wirklich eine JS-Datei erhalten.
const contentType = response.headers.get('content-type');
if (
response.status === 404 ||
(contentType != null && contentType.indexOf('javascript') === -1)
) {
// Kein Service Worker gefunden. Wahrscheinlich eine andere App. Seite neu laden.
navigator.serviceWorker.ready.then(registration => {
registration.unregister().then(() => {
window.location.reload();
});
});
} else {
// Service Worker gefunden. Normal fortfahren.
registerValidSW(swUrl, config);
}
})
.catch(() => {
console.log(
'Keine Internetverbindung gefunden. Die App läuft im Offline-Modus.'
);
});
}
// ... (gekürzt, insgesamt 128 Zeilen)
bf988bc6d 43 npm-Schwachstellen beseitigt: react-scripts→Vite, ESLint 9, Abhängigkeitsbereinigung, Fehlerbehebungen dcbcb3a34 ESLint auf Redux-Dateien angewendet b265eb093 Erster Commit für Webapp