From 82f48b84b3c49119cdbdf7b5fa3f4770b7a70c1a Mon Sep 17 00:00:00 2001 From: Halil Durak Date: Fri, 6 Feb 2026 23:49:03 +0300 Subject: [PATCH 1/2] changes to trigger `documentElement`s load event This fixes the triggering issue; though the order of execution is wrong... --- src/browser/Page.zig | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/browser/Page.zig b/src/browser/Page.zig index 29deac0e..123b347e 100644 --- a/src/browser/Page.zig +++ b/src/browser/Page.zig @@ -698,21 +698,30 @@ pub fn documentIsComplete(self: *Page) void { fn _documentIsComplete(self: *Page) !void { self.document._ready_state = .complete; + // Should this be different for each? var ls: JS.Local.Scope = undefined; self.js.localScope(&ls); defer ls.deinit(); // Dispatch `_to_load` events before window.load. for (self._to_load.items) |element| { - const maybe_inline_listener = self.getAttrListener(element, .onload); - const event = try Event.initTrusted("load", .{}, self); + if (comptime IS_DEBUG) { + log.debug(.page, "load event for element", .{ .element = element }); + } - try self._event_manager.dispatchWithFunction( - element.asEventTarget(), - event, - ls.toLocal(maybe_inline_listener), - .{ .context = "Page dispatch load events" }, - ); + const event = try Event.initTrusted("load", .{}, self); + // Dispatch inline event. + blk: { + const html_element = element.is(HtmlElement) orelse break :blk; + + const listener = (try html_element.getOnLoad(self)) orelse break :blk; + ls.toLocal(listener).call(void, .{}) catch |err| { + log.warn(.event, "inline load event", .{ .element = element, .err = err }); + }; + } + + // Dispatch events registered to event manager. + try self._event_manager.dispatch(element.asEventTarget(), event); } // `_to_load` can be cleaned here. From e17f1269a2da06db97e6a86516c6a0ffda1fb0b7 Mon Sep 17 00:00:00 2001 From: Halil Durak Date: Mon, 9 Feb 2026 10:43:22 +0300 Subject: [PATCH 2/2] remove unnecessary comment and `comptime if` --- src/browser/Page.zig | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/browser/Page.zig b/src/browser/Page.zig index 123b347e..a9462d1e 100644 --- a/src/browser/Page.zig +++ b/src/browser/Page.zig @@ -698,17 +698,12 @@ pub fn documentIsComplete(self: *Page) void { fn _documentIsComplete(self: *Page) !void { self.document._ready_state = .complete; - // Should this be different for each? var ls: JS.Local.Scope = undefined; self.js.localScope(&ls); defer ls.deinit(); // Dispatch `_to_load` events before window.load. for (self._to_load.items) |element| { - if (comptime IS_DEBUG) { - log.debug(.page, "load event for element", .{ .element = element }); - } - const event = try Event.initTrusted("load", .{}, self); // Dispatch inline event. blk: {