diff --git a/src/client/client.ts b/src/client/client.ts index d0fc398..d83cef8 100644 --- a/src/client/client.ts +++ b/src/client/client.ts @@ -108,7 +108,7 @@ export class ScramjetClient { resolve(data.port); } }); - }) + }), ); } @@ -189,7 +189,7 @@ export class ScramjetClient { } get url(): URL { - return new URL(decodeUrl(self.location.href)); + return new URL(decodeUrl(this.global.location.href)); } set url(url: URL | string) { @@ -201,7 +201,7 @@ export class ScramjetClient { } if (ev.defaultPrevented) return; - self.location.href = encodeUrl(ev.url, this.meta); + this.global.location.href = encodeUrl(ev.url, this.meta); } // below are the utilities for proxying and trapping dom APIs @@ -239,7 +239,7 @@ export class ScramjetClient { h.construct = function ( constructor: any, argArray: any[], - newTarget: AnyFunction + newTarget: AnyFunction, ) { let returnValue: any = undefined; let earlyreturn = false; @@ -354,7 +354,7 @@ export class ScramjetClient { RawTrap( target: any, prop: string, - descriptor: Trap + descriptor: Trap, ): PropertyDescriptor { if (!target) return; if (!prop) return; diff --git a/src/shared/rewriters/url.ts b/src/shared/rewriters/url.ts index 535f3e3..bcdc6e7 100644 --- a/src/shared/rewriters/url.ts +++ b/src/shared/rewriters/url.ts @@ -19,29 +19,20 @@ export function encodeUrl(url: string | URL, meta: URLMeta) { url = url.href; } - // if (!origin) { - // if (location.pathname.startsWith(self.$scramjet.config.prefix + "worker")) { - // origin = new URL(new URL(location.href).searchParams.get("origin")); - // } else - // origin = new URL( - // self.$scramjet.codec.decode( - // location.href.slice( - // (location.origin + self.$scramjet.config.prefix).length - // ) - // ) - // ); - // } - if (url.startsWith("javascript:")) { return "javascript:" + rewriteJs(url.slice("javascript:".length), meta); } else if (/^(#|mailto|about|data|blob)/.test(url)) { // TODO this regex is jank but i'm not fixing it return url; } else { + let base = meta.base.href; + + if (base.startsWith("about:")) base = decodeUrl(self.location.href); // jank!!!!! weird jank!!! + return ( location.origin + self.$scramjet.config.prefix + - self.$scramjet.codec.encode(new URL(url, meta.base).href) + self.$scramjet.codec.encode(new URL(url, base).href) ); } } @@ -54,7 +45,7 @@ export function decodeUrl(url: string | URL) { if ( tryCanParseURL(url)?.pathname.startsWith( - self.$scramjet.config.prefix + "worker" + self.$scramjet.config.prefix + "worker", ) ) { return new URL(new URL(url).searchParams.get("origin")).href; @@ -64,7 +55,7 @@ export function decodeUrl(url: string | URL) { return url; } else if (tryCanParseURL(url)) { return self.$scramjet.codec.decode( - url.slice((location.origin + self.$scramjet.config.prefix).length) + url.slice((location.origin + self.$scramjet.config.prefix).length), ); } else { return url;