function ok()
{
window.opener.ok.apply(window.opener, arguments);
}
function is()
{
window.opener.is.apply(window.opener, arguments);
}
async function runTests()
{ variframe = document.getElementById("iframe"); var anchor = iframe.contentDocument.getElementById("anchor"); vardiv = iframe.contentDocument.getElementById("div");
async function resetScroll()
{ var oldFocus = document.activeElement; var oldFrameFocus = iframe.contentDocument.activeElement;
// Cancel any scroll animation on the target scroll elements to make sure
// setting scrollTop or scrolLeft works as expected.
// cancelScrollAnimation clears focus, so make sure to restore it.
await cancelScrollAnimation(document.documentElement);
await cancelScrollAnimation(iframe.contentDocument.documentElement);
oldFocus.focus();
oldFrameFocus.focus();
return new Promise(resolve => { var scrollParent = document.documentElement.scrollTop || document.documentElement.scrollLeft; var scrollChild = iframe.contentDocument.documentElement.scrollTop || iframe.contentDocument.documentElement.scrollLeft;
if (scrollParent) {
window.addEventListener("scroll", () => {
scrollParent = false;
if (!scrollChild) {
SimpleTest.executeSoon(resolve);
}
}, { once: true });
}
if (scrollChild) { iframe.contentWindow.addEventListener("scroll", () => {
scrollChild = false;
if (!scrollParent) {
SimpleTest.executeSoon(resolve);
}
}, { once: true });
}
document.documentElement.scrollTop = 0;
document.documentElement.scrollLeft = 0; iframe.contentDocument.documentElement.scrollTop = 0; iframe.contentDocument.documentElement.scrollLeft = 0;
if (!scrollParent && !scrollChild) {
SimpleTest.executeSoon(resolve);
}
});
}
async function tryToScrollWithKey(aVertical)
{
await resetScroll();
// When iframe element has focus and the iframe document isn't scrollable, the parent document should be scrolled instead.
document.body.focus(); iframe.focus();
await tryToScrollWithKey(true);
ok(document.documentElement.scrollTop > 0, "ArrowDown keydown event at the iframe whose content is not scrollable should cause scrolling the parent document");
await tryToScrollWithKey(false);
ok(document.documentElement.scrollLeft > 0, "ArrowRight keydown event at the iframe whose content is not scrollable should cause scrolling the parent document");
await resetScroll();
// When iframe element has focus and the iframe document scrollable, the parent document shouldn't be scrolled.
document.body.focus(); div.style.height = "1000px"; div.style.width = "1000px"; iframe.focus();
await tryToScrollWithKey(true);
is(document.documentElement.scrollTop, 0, "ArrowDown keydown event at the iframe whose content is scrollable shouldn't cause scrolling the parent document");
ok(iframe.contentDocument.documentElement.scrollTop > 0, "ArrowDown keydown event at the iframe whose content is scrollable should cause scrolling the iframe document");
await tryToScrollWithKey(false);
is(document.documentElement.scrollLeft, 0, "ArrowRight keydown event at the iframe whose content is scrollable shouldn't cause scrolling the parent document");
ok(iframe.contentDocument.documentElement.scrollLeft > 0, "ArrowRight keydown event at the iframe whose content is scrollable should cause scrolling the iframe document");
await resetScroll();
// If iframe document cannot scroll to specific direction, parent document should be scrolled instead. div.style.height = "1px"; div.style.width = "1000px"; iframe.focus();
await tryToScrollWithKey(true);
ok(document.documentElement.scrollTop > 0, "ArrowDown keydown event at the iframe whose content is scrollable only horizontally should cause scrolling the parent document");
await tryToScrollWithKey(false);
is(document.documentElement.scrollLeft, 0, "ArrowRight keydown event at the iframe whose content is scrollable only horizontally shouldn't cause scrolling the parent document");
ok(iframe.contentDocument.documentElement.scrollLeft > 0, "ArrowRight keydown event at the iframe whose content is scrollable only horizontally should cause scrolling the iframe document");
await resetScroll();
div.style.height = "1000px"; div.style.width = "1px"; iframe.focus();
await tryToScrollWithKey(true);
is(document.documentElement.scrollTop, 0, "ArrowDown keydown event at the iframe whose content is scrollable only vertically shouldn't cause scrolling the parent document");
ok(iframe.contentDocument.documentElement.scrollTop > 0, "ArrowDown keydown event at the iframe whose content is scrollable only vertically should cause scrolling the iframe document");
await tryToScrollWithKey(false);
ok(document.documentElement.scrollLeft > 0, "ArrowRight keydown event at the iframe whose content is scrollable only vertically should cause scrolling the parent document");
await resetScroll();
// Hidden iframe shouldn't consume keyboard events if it was not scrollable.
document.body.focus();
anchor.focus(); iframe.style.display = "none";
await tryToScrollWithKey(true);
ok(document.documentElement.scrollTop > 0, "ArrowDown keydown event after hiding the iframe should cause scrolling the parent document");
await tryToScrollWithKey(false);
ok(document.documentElement.scrollLeft > 0, "ArrowRight keydown event after hiding the iframe should cause scrolling the parent document");
await resetScroll();
// Make sure the result visible in the viewport.
document.documentElement.scrollTop = 0;
document.documentElement.scrollLeft = 0;
window.opener.finish();
}
</script>
</pre>
</body>
</html>
Messung V0.5
¤ Dauer der Verarbeitung: 0.25 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.