diff --git a/src/client/dom/element.ts b/src/client/dom/element.ts index 7517374..59e0359 100644 --- a/src/client/dom/element.ts +++ b/src/client/dom/element.ts @@ -175,6 +175,8 @@ export default function (client: ScramjetClient, self: typeof window) { }, }); + // an automated approach to cleaning the documentProxy from dom functions + // it will trigger an illegal invocation if you pass the proxy to c++ code, we gotta hotswap it out with the real one for (const target of [ self.Node.prototype, self.MutationObserver.prototype, diff --git a/src/client/dom/serviceworker.ts b/src/client/dom/serviceworker.ts index 7cd3473..ae679b4 100644 --- a/src/client/dom/serviceworker.ts +++ b/src/client/dom/serviceworker.ts @@ -2,12 +2,32 @@ import { encodeUrl } from "../../shared/rewriters/url"; import { ScramjetClient } from "../client"; export default function (client: ScramjetClient, self: Self) { + let fakeregistrations = new WeakSet(); + client.Proxy("Worklet.prototype.addModule", { apply(ctx) { ctx.args[0] = encodeUrl(ctx.args[0]); }, }); + client.Proxy("addEventListener", { + apply(ctx) { + if (fakeregistrations.has(ctx.this)) { + // do nothing + ctx.return(undefined); + } + }, + }); + + client.Proxy("removeEventListener", { + apply(ctx) { + if (fakeregistrations.has(ctx.this)) { + // do nothing + ctx.return(undefined); + } + }, + }); + client.Proxy("navigator.serviceWorker.register", { apply(ctx) { if (ctx.args[0] instanceof URL) ctx.args[0] = ctx.args[0].href; @@ -54,6 +74,7 @@ export default function (client: ScramjetClient, self: Self) { }, } ); + fakeregistrations.add(fakeRegistration); ctx.return(new Promise((resolve) => resolve(fakeRegistration))); }, diff --git a/src/client/shared/requests/fetch.ts b/src/client/shared/requests/fetch.ts index 162daf5..a8c5b90 100644 --- a/src/client/shared/requests/fetch.ts +++ b/src/client/shared/requests/fetch.ts @@ -9,10 +9,6 @@ export default function (client: ScramjetClient, self: typeof globalThis) { if (typeof ctx.args[0] === "string" || ctx.args[0] instanceof URL) { ctx.args[0].toString(); ctx.args[0] = encodeUrl(ctx.args[0].toString()); - } else if (ctx.args[0] instanceof Request && ctx.args[0].url) { - Object.defineProperty(ctx.args[0], "url", { - value: encodeUrl(ctx.args[0].url), - }); } }, });