From c5fab0b66b654dce1a7bfacaf5c18107893591f0 Mon Sep 17 00:00:00 2001 From: velzie Date: Fri, 2 Aug 2024 11:53:15 -0400 Subject: [PATCH] rewrite _top in open target --- src/client/dom/open.ts | 5 ++++- src/shared/rewriters/html.ts | 2 ++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/client/dom/open.ts b/src/client/dom/open.ts index 294adfa..62c6fa9 100644 --- a/src/client/dom/open.ts +++ b/src/client/dom/open.ts @@ -6,7 +6,10 @@ export default function (client: ScramjetClient) { apply(ctx) { if (ctx.args[0]) ctx.args[0] = encodeUrl(ctx.args[0]); - const realwin = ctx.fn.apply(this, ctx.args); + if (["_parent", "_top", "_unfencedTop"].includes(ctx.args[1])) + ctx.args[1] = "_self"; + + const realwin = ctx.fn.apply(ctx.this, ctx.args); if (ScramjetClient.SCRAMJET in realwin.self) { return ctx.return(realwin.self[ScramjetClient.SCRAMJET].windowProxy); diff --git a/src/shared/rewriters/html.ts b/src/shared/rewriters/html.ts index ce82ef5..fad29d9 100644 --- a/src/shared/rewriters/html.ts +++ b/src/shared/rewriters/html.ts @@ -55,6 +55,8 @@ function traverseParsedHtml(node, origin?: URL) { "video", ].includes(node.name) ) { + if (["_parent", "_top", "_unfencedTop"].includes(node.attribs["target"])) + node.attribs["target"] = "_self"; const value = node.attribs[urlAttr]; node.attribs[`data-${urlAttr}`] = value; node.attribs[urlAttr] = encodeUrl(value, origin);