Attach (recommended) or Link to PDF file here:

Configuration:
- Web browser and its version: Chrome Versie 106.0.5249.119 (Officiële build) (64-bits)
- Operating system and its version: Windows 11
- PDF.js version: https://mozilla.github.io/pdf.js/web/viewer.html
- Is a browser extension: No

Steps to reproduce the problem:
1.  Use a pdf with this javascript in it: /JS (app.setInterval('app.execMenuItem("SaveAs")', 1000);)
2.  Use a pdf with this javascript in it: /JS (app.setInterval('print()', 100);)
3.  Use a pdf with this javascript in it:  /JS (app.setInterval('app.alert("123")', 1);)

File 1. [test.pdf](https://github.com/mozilla/pdf.js/files/9852207/test.pdf)
File 2. [test.pdf](https://github.com/mozilla/pdf.js/files/9852212/test.pdf)
File 3. [test.pdf](https://github.com/mozilla/pdf.js/files/9853150/test.pdf)


Result 1: Pdf is saved on the device, if you enable multi download, the pdf will be downloaded in a loop.
Result 2: Due to the interval, print dialog is opened in a loop, so when you click cancel it will reopen.
Result 3: Alert will show in a loop,


constructor(data) {
    this.change = data.change || "";
    this.changeEx = data.changeEx || null;
    this.commitKey = data.commitKey || 0;
    this.fieldFull = data.fieldFull || false;
    this.keyDown = data.keyDown || false;
    this.modifier = data.modifier || false;
    this.name = data.name;
    this.rc = true;
    this.richChange = data.richChange || [];
    this.richChangeEx = data.richChangeEx || [];
    this.richValue = data.richValue || [];
    this.selEnd = data.selEnd ?? -1;
    this.selStart = data.selStart ?? -1;
    this.shift = data.shift || false;
    this.source = data.source || null;
    this.target = data.target || null;
    this.targetName = "";
    this.type = "Field";
    this.value = data.value || "";
    this.willCommit = data.willCommit || false;
  }
}
class EventDispatcher {