diff --git a/src/browser/tests/event/report_error.html b/src/browser/tests/event/report_error.html
new file mode 100644
index 00000000..353dc29e
--- /dev/null
+++ b/src/browser/tests/event/report_error.html
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
diff --git a/src/browser/webapi/Window.zig b/src/browser/webapi/Window.zig
index 099cad65..1d12677c 100644
--- a/src/browser/webapi/Window.zig
+++ b/src/browser/webapi/Window.zig
@@ -343,7 +343,11 @@ pub fn reportError(self: *Window, err: js.Value, page: *Page) !void {
const event = error_event.asEvent();
event._prevent_default = prevent_default;
- try page._event_manager.dispatch(self.asEventTarget(), event);
+ // Pass null as handler: onerror was already called above with 5 args.
+ // We still dispatch so that addEventListener('error', ...) listeners fire.
+ try page._event_manager.dispatchDirect(self.asEventTarget(), event, null, .{
+ .context = "window.reportError",
+ });
if (comptime builtin.is_test == false) {
if (!event._prevent_default) {
@@ -874,3 +878,7 @@ test "WebApi: Window" {
test "WebApi: Window scroll" {
try testing.htmlRunner("window_scroll.html", .{});
}
+
+test "WebApi: Window.onerror" {
+ try testing.htmlRunner("event/report_error.html", .{});
+}