navigator.serviceWorker.controller ist immer null

8

Ich habe das Problem, dass der navigator.serviceWorker.controller nach der Registrierung des serviceWorker immer null ist. Ich erzwinge nie eine Aktualisierung und aktualisiere die Seite. Ich teste es mit Google Chrome 42.0.2311.152 m (32-Bit).

%Vor%

Demnach:

  

Die schreibgeschützte Eigenschaft des Controllers der ServiceWorkerContainer-Schnittstelle gibt ein ServiceWorker-Objekt zurück, wenn sein Status aktiviert ist (dasselbe Objekt, das von ServiceWorkerRegistration.active zurückgegeben wird). Diese Eigenschaft gibt null zurück, wenn es sich bei der Anforderung um eine erzwungene Aktualisierung handelt (Umschalt + Aktualisierung) oder wenn kein aktiver Worker vorhanden ist. (Quelle: Ссылка )

navigator.serviceWorker.controller sollte das gleiche Objekt wie serviceWorkerRegistration.active zurückgeben. Aber mit .active bekomme ich den aktiven Worker, mit .controller nicht.

Haben Sie Ideen für diese Situation?

Danke, Andi

    
user24502 15.05.2015, 09:50
quelle

2 Antworten

8

Das erste, was ich mir beim Debuggen ansehen würde, ist, ob die aktuelle Seite, auf der Sie sich befinden, in den Bereich des Service-Arbeiters fällt. Wenn Ihre aktuelle Seite nicht im Bereich liegt, wird sie nicht kontrolliert (aber der von Ihnen registrierte Service-Mitarbeiter kann immer noch als aktiv betrachtet werden).

Sie rufen register(SERVICE_WORKER_URL) auf, das standardmäßig das Verzeichnis verwendet, das Ihr Service Worker-Skript als Bereich enthält. Das ist normalerweise das, was Sie möchten, aber Sie müssen sicherstellen, dass SERVICE_WORKER_URL sich auf ein Skript bezieht, das sich im Stammverzeichnis Ihrer Website befindet. Auf diese Weise wird es möglich sein, Seiten auf derselben Root-Ebene oder auf Seiten in Verzeichnissen unter Ihrem Webstamm zu steuern. Wenn sich Ihre JavaScript-Datei des Service-Arbeiters derzeit in einem Unterverzeichnis /scripts/ oder etwas ähnlichem befindet, verschieben Sie sie in das Stammverzeichnis.

Sie können den aktuellen Umfang Ihres Service-Mitarbeiters überprüfen, indem Sie chrome://serviceworker-internals/ aufrufen und prüfen, welcher Umfang mit Ihrer Registrierung verbunden ist.

    
Jeff Posnick 15.05.2015, 14:48
quelle
1

navigator.serviceWorker.register registriert nur den Serviceworker und aktiviert ihn. Um jedoch den Controller über den Service-Mitarbeiter zu bringen, müssen Sie Ihren Service-Mitarbeiter in den öffentlichen Stammordner versetzen, so dass alle Seiten im Bereich enthalten sind und der Service-Mitarbeiter damit verbunden ist.

    
alle 30.12.2016 09:11
quelle

Tags und Links