diff --git a/src/browser/dom/nodelist.zig b/src/browser/dom/nodelist.zig index 56194c2f..22e8708f 100644 --- a/src/browser/dom/nodelist.zig +++ b/src/browser/dom/nodelist.zig @@ -110,7 +110,7 @@ pub const NodeList = struct { try self.nodes.append(alloc, node); } - pub fn get_length(self: *NodeList) u32 { + pub fn get_length(self: *const NodeList) u32 { return @intCast(self.nodes.items.len); } diff --git a/src/browser/html/window.zig b/src/browser/html/window.zig index 1d5f8064..7bc31831 100644 --- a/src/browser/html/window.zig +++ b/src/browser/html/window.zig @@ -34,6 +34,7 @@ const MediaQueryList = @import("media_query_list.zig").MediaQueryList; const Performance = @import("../dom/performance.zig").Performance; const CSSStyleDeclaration = @import("../cssom/CSSStyleDeclaration.zig"); const Screen = @import("screen.zig").Screen; +const domcss = @import("../dom/css.zig"); const Css = @import("../css/css.zig").Css; const Function = Env.Function; @@ -134,9 +135,16 @@ pub const Window = struct { pub fn get_frames(self: *Window) *Window { return self; } - // TODO: frames - pub fn get_length(_: *Window) u32 { - return 0; + + // Retrieve the numbre of frames/iframes from the DOM dynamically. + pub fn get_length(self: *const Window, page: *Page) !u32 { + const frames = try domcss.querySelectorAll( + page.call_arena, + parser.documentHTMLToNode(self.document), + "frame,iframe", + ); + + return frames.get_length(); } pub fn get_top(self: *Window) *Window {