diff --git a/src/client/dom/open.ts b/src/client/dom/open.ts index 2139aad..9422a96 100644 --- a/src/client/dom/open.ts +++ b/src/client/dom/open.ts @@ -11,6 +11,8 @@ export default function (client: ScramjetClient) { const realwin = ctx.fn.apply(ctx.this, ctx.args); + if (!realwin) return ctx.return(realwin); + if (ScramjetClient.SCRAMJET in realwin.self) { return ctx.return(realwin.self[ScramjetClient.SCRAMJET].windowProxy); } else { diff --git a/src/client/dom/serviceworker.ts b/src/client/dom/serviceworker.ts index f58c182..a46e1ab 100644 --- a/src/client/dom/serviceworker.ts +++ b/src/client/dom/serviceworker.ts @@ -38,6 +38,24 @@ export default function (client: ScramjetClient, self: Self) { }, }); + client.Proxy("navigator.serviceWorker.getRegistrations", { + apply(ctx) { + ctx.return(new Promise((resolve) => resolve([registration]))); + }, + }); + + client.Trap("navigator.serviceWorker.ready", { + get(ctx) { + return new Promise((resolve) => resolve(registration)); + }, + }); + + 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; @@ -77,6 +95,9 @@ export default function (client: ScramjetClient, self: Self) { if (prop === "scope") { return ctx.args[0]; } + if (prop === "unregister") { + return () => {}; + } if (prop === "addEventListener") { return () => {};