diff --git a/packages/extension/src/traceView.ts b/packages/extension/src/traceView.ts index c028532..8c5654b 100644 --- a/packages/extension/src/traceView.ts +++ b/packages/extension/src/traceView.ts @@ -130,11 +130,21 @@ export class TraceViewManager { /new URL\("\.\/ui\/html\.meta\.json\.gz", window\.location\.href\)/g, JSON.stringify(`${metadata.toString()}?v=${Date.now()}`), ) + // Keep the document base on the webview origin so history updates stay + // same-origin. Only resource URLs should point at the report directory. + html = html.replace(/<(script|link|img|source)\b[^>]*>/gi, tag => tag.replace( + /(\s)(src|href)\s*=\s*(['"])(.*?)\3/gi, + (attribute, space, name, quote, value) => { + if (!value || /^(?:[a-z][a-z\d+.-]*:|\/\/|#)/i.test(value)) + return attribute + const url = new URL(value.replace(/&/g, '&'), base).href + return `${space}${name}=${quote}${url.replace(/&/g, '&').replace(/"/g, '"').replace(/'/g, ''')}${quote}` + }, + )) html = html.replace(/]*>/i, `$& - - +