anticipate firefox throwing a SecurityError from sw.register()
and just proceed as if they were not supported
This commit is contained in:
parent
1ac36cbd23
commit
91949a0006
2 changed files with 17 additions and 5 deletions
|
@ -100,8 +100,10 @@ export class Platform {
|
||||||
this.onlineStatus = new OnlineStatus();
|
this.onlineStatus = new OnlineStatus();
|
||||||
this._serviceWorkerHandler = null;
|
this._serviceWorkerHandler = null;
|
||||||
if (config.serviceWorker && "serviceWorker" in navigator) {
|
if (config.serviceWorker && "serviceWorker" in navigator) {
|
||||||
this._serviceWorkerHandler = new ServiceWorkerHandler();
|
const serviceWorkerHandler = new ServiceWorkerHandler();
|
||||||
this._serviceWorkerHandler.registerAndStart(config.serviceWorker);
|
if (serviceWorkerHandler.registerAndStart(config.serviceWorker)) {
|
||||||
|
this._serviceWorkerHandler = serviceWorkerHandler;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
this.notificationService = new NotificationService(this._serviceWorkerHandler, config.push);
|
this.notificationService = new NotificationService(this._serviceWorkerHandler, config.push);
|
||||||
this.crypto = new Crypto(cryptoExtras);
|
this.crypto = new Crypto(cryptoExtras);
|
||||||
|
|
|
@ -34,10 +34,19 @@ export class ServiceWorkerHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
registerAndStart(path) {
|
registerAndStart(path) {
|
||||||
this._registrationPromise = (async () => {
|
|
||||||
navigator.serviceWorker.addEventListener("message", this);
|
navigator.serviceWorker.addEventListener("message", this);
|
||||||
navigator.serviceWorker.addEventListener("controllerchange", this);
|
navigator.serviceWorker.addEventListener("controllerchange", this);
|
||||||
this._registration = await navigator.serviceWorker.register(path);
|
let registrationPromise;
|
||||||
|
try {
|
||||||
|
// this can throw a SecurityError in Firefox with hardened settings
|
||||||
|
registrationPromise = navigator.serviceWorker.register(path);
|
||||||
|
} catch (err) {
|
||||||
|
navigator.serviceWorker.removeEventListener("message", this);
|
||||||
|
navigator.serviceWorker.removeEventListener("controllerchange", this);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
this._registrationPromise = (async () => {
|
||||||
|
this._registration = await registrationPromise;
|
||||||
await navigator.serviceWorker.ready;
|
await navigator.serviceWorker.ready;
|
||||||
this._currentController = navigator.serviceWorker.controller;
|
this._currentController = navigator.serviceWorker.controller;
|
||||||
this._registration.addEventListener("updatefound", this);
|
this._registration.addEventListener("updatefound", this);
|
||||||
|
@ -48,6 +57,7 @@ export class ServiceWorkerHandler {
|
||||||
}
|
}
|
||||||
console.log("Service Worker registered");
|
console.log("Service Worker registered");
|
||||||
})();
|
})();
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
_onMessage(event) {
|
_onMessage(event) {
|
||||||
|
|
Reference in a new issue