Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
- This WPT test may be referenced by the following Test IDs:
- /html/semantics/embedded-content/the-frame-element/frame-javascript-url-load-event.html - WPT Dashboard Interop Dashboard
<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<body>
<script>
function navigationTaskRan() {
if (window.requestIdleCallback)
return new Promise(resolve => requestIdleCallback(resolve));
return new Promise(resolve => requestAnimationFrame(_ => requestAnimationFrame(resolve)));
}
promise_test(async t => {
let ran = false;
window.javascriptURLRan = () => { ran = true; };
const frame = document.createElement("frame");
t.add_cleanup(() => frame.remove());
frame.src = "javascript:parent.javascriptURLRan()";
const loaded = new Promise(resolve => { frame.onload = resolve; });
document.body.append(frame);
await loaded;
assert_true(ran, "javascript: URL ran");
frame.onload = t.unreached_func("second load event");
await navigationTaskRan();
}, "Inserting a frame with a javascript: URL src fires one load event");
promise_test(async t => {
const frame = document.createElement("frame");
t.add_cleanup(() => frame.remove());
const loaded = new Promise(resolve => { frame.onload = resolve; });
document.body.append(frame);
await loaded;
frame.onload = t.unreached_func("load event");
let ran = false;
window.javascriptURLRan = () => { ran = true; };
frame.src = "javascript:parent.javascriptURLRan()";
await navigationTaskRan();
assert_true(ran, "javascript: URL ran");
}, "Setting a frame's src to a javascript: URL after insertion does not fire a load event");
</script>