Skip to content

Commit a05af2e

Browse files
authored
Merge pull request #29 from webrecorder/onbeforeunload-listener
add `beforeunload` handler on page change & remove it after download button is pressed
2 parents 07e505e + 9d1b251 commit a05af2e

File tree

1 file changed

+17
-0
lines changed

1 file changed

+17
-0
lines changed

src/archive-now.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,13 @@ const DEFAULT_URL = "https://example.com/";
2222

2323
type Hint = "first-load" | "page-load" | "error" | "over-page-min" | "finished";
2424

25+
const beforeUnloadHandler = (event: Event) => {
26+
event.preventDefault();
27+
28+
// Included for legacy support, e.g. Chrome/Edge < 119
29+
event.returnValue = true;
30+
};
31+
2532
@customElement("archive-now")
2633
class ArchiveNow extends LitElement {
2734
@state()
@@ -281,6 +288,7 @@ class ArchiveNow extends LitElement {
281288
if (!win) {
282289
return;
283290
}
291+
this.setWarnOnPageClose(true);
284292

285293
const resp = await win.fetch(`./w/api/c/${this.collId}?all=1`);
286294
try {
@@ -291,6 +299,14 @@ class ArchiveNow extends LitElement {
291299
}
292300
}
293301

302+
setWarnOnPageClose(on: boolean) {
303+
if (on) {
304+
window.addEventListener("beforeunload", beforeUnloadHandler);
305+
} else {
306+
window.removeEventListener("beforeunload", beforeUnloadHandler);
307+
}
308+
}
309+
294310
render() {
295311
return html`
296312
<header class="flex items-center justify-between [grid-area:header]">
@@ -355,6 +371,7 @@ class ArchiveNow extends LitElement {
355371
target="_blank"
356372
size="large"
357373
variant="primary"
374+
@click=${() => this.setWarnOnPageClose(false)}
358375
>
359376
<sl-icon slot="prefix" name="download"></sl-icon>
360377
Download Archive (.wacz)

0 commit comments

Comments
 (0)