diff --git a/html/semantics/embedded-content/the-iframe-element/load-event-timing.window.js b/html/semantics/embedded-content/the-iframe-element/load-event-timing.window.js
new file mode 100644
index 00000000000000..be6a08d4ec8bad
--- /dev/null
+++ b/html/semantics/embedded-content/the-iframe-element/load-event-timing.window.js
@@ -0,0 +1,58 @@
+async_test(t => {
+ const frame = document.createElement("iframe");
+ t.add_cleanup(() => frame.remove());
+ let happened = []
+ frame.onload = t.step_func(() => happened.push("load"));
+ document.body.append(frame);
+ happened.push("append");
+ // Use timeout for assert in case there's multiple load events erroneously
+ t.step_timeout(() => {
+ assert_array_equals(happened, ["load", "append"]);
+ t.done();
+ }, 500);
+}, "