diff --git a/src/client/dom/serviceworker.ts b/src/client/dom/serviceworker.ts index 841a600..d3031ce 100644 --- a/src/client/dom/serviceworker.ts +++ b/src/client/dom/serviceworker.ts @@ -7,9 +7,14 @@ import { getOwnPropertyDescriptorHandler } from "../helpers"; export const order = 2; export const enabled = () => config.flags.serviceworkers; + export function disabled(_client: ScramjetClient, _self: Self) { Reflect.deleteProperty(Navigator.prototype, "serviceWorker"); } +let realPostMessage; +if (self.ServiceWorker) { + realPostMessage = ServiceWorker.prototype.postMessage; +} export default function (client: ScramjetClient, _self: Self) { let registration; @@ -52,12 +57,6 @@ export default function (client: ScramjetClient, _self: Self) { }, }); - client.Trap("navigator.serviceWorker.controller", { - get(_ctx) { - return registration?.active; - }, - }); - client.Proxy("navigator.serviceWorker.register", { apply(ctx) { if (ctx.args[0] instanceof URL) ctx.args[0] = ctx.args[0].href; @@ -66,11 +65,13 @@ export default function (client: ScramjetClient, _self: Self) { url += "&type=module"; } - const worker = new SharedWorker(url); + const nativeSharedWorker = client.natives["SharedWorker"]; + const worker = new nativeSharedWorker(url); const handle = worker.port; - client.serviceWorker.controller.postMessage( + realPostMessage.call( + client.serviceWorker.controller, { scramjet$type: "registerServiceWorker", port: handle, diff --git a/static/ui.js b/static/ui.js index dd784f5..d1ca443 100644 --- a/static/ui.js +++ b/static/ui.js @@ -6,6 +6,9 @@ const scramjet = new ScramjetController({ shared: "/scram/scramjet.shared.js", sync: "/scram/scramjet.sync.js", }, + flags: { + serviceworkers: true, + }, }); scramjet.init("./sw.js");