diff --git a/packages/html-reporter/src/index.tsx b/packages/html-reporter/src/index.tsx
index 0c3f0a6dc0..16c1ae1a88 100644
--- a/packages/html-reporter/src/index.tsx
+++ b/packages/html-reporter/src/index.tsx
@@ -50,6 +50,8 @@ window.onload = () => {
ReactDOM.createRoot(document.querySelector('#root')!).render();
};
+const kPlaywrightReportStorageForHMR = 'playwrightReportStorageForHMR';
+
class ZipReport implements LoadedReport {
private _entries = new Map();
private _json!: HTMLReport;
@@ -58,8 +60,20 @@ class ZipReport implements LoadedReport {
const zipURI = await new Promise(resolve => {
if (window.playwrightReportBase64)
return resolve(window.playwrightReportBase64);
- window.addEventListener('message', event => event.source === window.opener && resolve(event.data), { once: true });
- window.opener.postMessage('ready', '*');
+ if (window.opener) {
+ window.addEventListener('message', event => {
+ if (event.source === window.opener) {
+ localStorage.setItem(kPlaywrightReportStorageForHMR, event.data);
+ resolve(event.data);
+ }
+ }, { once: true });
+ window.opener.postMessage('ready', '*');
+ } else {
+ const oldReport = localStorage.getItem(kPlaywrightReportStorageForHMR);
+ if (oldReport)
+ return resolve(oldReport);
+ alert('couldnt find report, something with HMR is broken');
+ }
});
const zipReader = new zipjs.ZipReader(new zipjs.Data64URIReader(zipURI), { useWebWorkers: false });