diff --git a/src/client/index.ts b/src/client/index.ts index 16d37db..2850b72 100644 --- a/src/client/index.ts +++ b/src/client/index.ts @@ -21,3 +21,20 @@ declare global { __s: any; } } + +const scripts = document.querySelectorAll("script:not([data-scramjet])"); + +for (const script of scripts) { + const clone = document.createElement("script"); + + for (const attr of Array.from(script.attributes)) { + clone.setAttribute(attr.name, attr.value); + } + + if (script.innerHTML !== "") { + clone.innerHTML = script.innerHTML; + } + + script.insertAdjacentElement("afterend", clone); + script.remove(); +} \ No newline at end of file diff --git a/src/client/requests/websocket.ts b/src/client/requests/websocket.ts index b846d42..0e3caff 100644 --- a/src/client/requests/websocket.ts +++ b/src/client/requests/websocket.ts @@ -12,4 +12,4 @@ WebSocket = new Proxy(WebSocket, { ArrayBuffer.prototype ) } -}) \ No newline at end of file +}); \ No newline at end of file diff --git a/src/shared/rewriters/html.ts b/src/shared/rewriters/html.ts index 6b35fe9..72a7686 100644 --- a/src/shared/rewriters/html.ts +++ b/src/shared/rewriters/html.ts @@ -4,7 +4,7 @@ import { hasAttrib } from "domutils"; import render from "dom-serializer"; import { encodeUrl } from "./url"; import { rewriteCss } from "./css"; -import { rewriteJs } from "./js"; +// import { rewriteJs } from "./js"; import { isScramjetFile } from ".."; export function rewriteHtml(html: string, origin?: URL) { @@ -50,7 +50,7 @@ function traverseParsedHtml(node, origin?: URL) { if (hasAttrib(node, "style")) node.attribs.style = rewriteCss(node.attribs.style, origin); if (node.name === "style" && node.children[0] !== undefined) node.children[0].data = rewriteCss(node.children[0].data, origin); - if (node.name === "script" && /(application|text)\/javascript|importmap|undefined/.test(node.attribs.type) && node.children[0] !== undefined) node.children[0].data = rewriteJs(node.children[0].data, origin); + // if (node.name === "script" && /(application|text)\/javascript|importmap|undefined/.test(node.attribs.type) && node.children[0] !== undefined) node.children[0].data = rewriteJs(node.children[0].data, origin); if (node.name === "meta" && hasAttrib(node, "http-equiv")) { if (node.attribs["http-equiv"] === "content-security-policy") { node = {}; @@ -66,7 +66,8 @@ function traverseParsedHtml(node, origin?: URL) { ["codecs", "config", "shared", "client"].forEach((script) => { scramjetScripts.push(new Element("script", { src: self.__scramjet$config[script], - type: "module" + type: "module", + "data-scramjet": "" })); }); diff --git a/src/worker/index.ts b/src/worker/index.ts index 47b5883..78ad946 100644 --- a/src/worker/index.ts +++ b/src/worker/index.ts @@ -48,7 +48,11 @@ export default class ScramjetServiceWorker { switch (request.destination) { case "iframe": case "document": - responseBody = rewriteHtml(await response.text(), url); + if (responseHeaders["content-type"].startsWith("text/html")) { + responseBody = rewriteHtml(await response.text(), url); + } else { + responseBody = response.body; + } break; case "script": responseBody = rewriteJs(await response.text(), url);