changes to trigger documentElements load event

This fixes the triggering issue; though the order of execution is wrong...
This commit is contained in:
Halil Durak
2026-02-06 23:49:03 +03:00
parent 0a410a5544
commit 82f48b84b3

View File

@@ -698,21 +698,30 @@ pub fn documentIsComplete(self: *Page) void {
fn _documentIsComplete(self: *Page) !void { fn _documentIsComplete(self: *Page) !void {
self.document._ready_state = .complete; self.document._ready_state = .complete;
// Should this be different for each?
var ls: JS.Local.Scope = undefined; var ls: JS.Local.Scope = undefined;
self.js.localScope(&ls); self.js.localScope(&ls);
defer ls.deinit(); defer ls.deinit();
// Dispatch `_to_load` events before window.load. // Dispatch `_to_load` events before window.load.
for (self._to_load.items) |element| { for (self._to_load.items) |element| {
const maybe_inline_listener = self.getAttrListener(element, .onload); if (comptime IS_DEBUG) {
const event = try Event.initTrusted("load", .{}, self); log.debug(.page, "load event for element", .{ .element = element });
}
try self._event_manager.dispatchWithFunction( const event = try Event.initTrusted("load", .{}, self);
element.asEventTarget(), // Dispatch inline event.
event, blk: {
ls.toLocal(maybe_inline_listener), const html_element = element.is(HtmlElement) orelse break :blk;
.{ .context = "Page dispatch load events" },
); 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. // `_to_load` can be cleaned here.