1

Ich habe eine progressive Web-App geschrieben, nach allen verfügbaren Leitfäden und Beispiele, aber aus irgendeinem Grund, wenn ich Sie auf die Add to homescreen Taste, halte ich diese mysteriöse Fehler bekommen:Progressive Web App „funktioniert nicht offline“ Fehler

Site cannot be installed: does not work offline 

Der Hauptunterschied zwischen meinem PWA und den Beispielen besteht darin, dass meins nur in einem Nicht-Root-Pfad der Domäne läuft, also musste ich den configs an verschiedenen Stellen zusätzliche Pfade hinzufügen, sodass die App auf die beschränkt ist Nicht-root-Ordner.

Die Google Lighthouse Seite hilft auch nicht viel und gibt eine sehr ähnliche Nachricht.

Kann jemand vorschlagen, woran dieser Fehler liegen könnte?

Antwort

4

So dauerte es ein paar Stunden, aber ich fand schließlich heraus, dass es einen erforderlichen scope Parameter gibt, den Sie im Client-JavaScript beim Herstellen einer Verbindung zum Servicearbeiter angeben müssen, wenn er nicht auf dem Stamm ausgeführt wird (/) Pfad.

if ('serviceWorker' in navigator) { 
    navigator.serviceWorker.register('sw.js?v2', { 
     scope: '.' // <--- THIS BIT IS REQUIRED 
    }).then(function(registration) { 
     // Registration was successful 
     console.log('ServiceWorker registration successful with scope: ', registration.scope); 
    }, function(err) { 
     // registration failed :(
     console.log('ServiceWorker registration failed: ', err); 
    }); 
} 

Sie können die Arbeits Produkt, das hier sehen:

Ich hoffe, dass mein Schmerz jemand anderen Zeit sparen kann.

+0

Das ist nicht erforderlich. Aber es sieht so aus, als würdest du deine PWA in diesem Ordner finden. Also musst du es umschreiben. Der Grund, warum Sie diesen Fehler erhalten haben, ist, dass für diesen Bereich kein Service-Mitarbeiter-Abruf-Ereignishandler vorhanden war. Dieser Beitrag spricht über diese Anforderung: https://love2dev.com/blog/-your-progressive-web-app-may-not-prompting-the-customer-to-add-to-home-screen/ –

+0

Es ist Es gibt keine dokumentierte Anforderung (nicht einmal auf Ihrer Site), dass Sie beim Scoping einer Anwendung den Bereich im aufrufenden Skript angeben müssen. Das Hinzufügen des Bereichs zum Manifest funktioniert nicht, der Aufruf des serviceWorker im Website-Code ist standardmäßig Root-Bereich und ignoriert das Manifest. Dies könnte ein Fehler in der ServiceWorker-Implementierung sein, um ehrlich zu sein. Wenn _alle_ meiner Website-Dateien im relativen Verzeichnis gespeichert sind, sollte die App keine absolute Gültigkeit haben, sondern nur die Bereitstellung an einem sekundären Standort. – StampyCode

+1

@ChrisLove in der Tat, ich habe gerade gefunden, dass Sie den Umfang auf '.' und es funktioniert. Obwohl der Parameter in meinem Client-Skript immer noch benötigt wird, kann er jetzt zumindest den absoluten Pfad ignorieren. – StampyCode

Verwandte Themen