Source code

Revision control

Copy as Markdown

Other Tools

<html>
<head>
<script>
var loadCount = 0;
function loadListener() {
++loadCount;
if (loadCount == 2) {
// Use a timer to ensure we don't get extra load events.
setTimeout(function() {
var doc1URI = document.getElementById("i1").contentDocument.documentURI;
opener.ok(doc1URI.includes("frame1.html"),
"Should have loaded the initial page to the first iframe. Got " + doc1URI);
var doc2URI = document.getElementById("i2").contentDocument.documentURI;
opener.ok(doc2URI.includes("frame1.html"),
"Should have loaded the initial page to the second iframe. Got " + doc2URI);
opener.finishTest();
}, 1000);
} else if (loadCount > 2) {
opener.ok(false, "Too many load events");
}
// if we don't get enough load events, the test will time out.
}
function setupIframe(id) {
var ifr = document.getElementById(id);
return new Promise(function(resolve) {
ifr.onload = function() {
// Replace load listener to catch page loads from the session history.
ifr.onload = loadListener;
// Need to use setTimeout, because triggering loads inside
// load event listener has special behavior since at the moment
// the docshell keeps track of whether it is executing a load handler or not.
setTimeout(resolve);
}
ifr.contentWindow.location.href = "frame2.html";
});
}
async function test() {
await setupIframe("i1");
await setupIframe("i2");
history.go(-2);
}
</script>
</head>
<body onload="setTimeout(test)">
<iframe id="i1" src="frame1.html"></iframe>
<iframe id="i2" src="frame1.html"></iframe>
</body>
</html>