【发布时间】:2021-10-09 02:36:49
【问题描述】:
当存在跨域 <iframe> 时,我正在尝试解决模态框内的选项卡问题。
我注意到了什么:
- 如果 iFrame 不是模态框的第一个或最后一个可聚焦元素,则无需使用 javascript 设置
.focus()。 - 如果 iFrame 是模式中的第一个或最后一个可聚焦元素,我需要使用 javascript 设置
.focus()以保持键盘可访问性。
.focus() 在此用途中受到限制。而且由于我无法设置焦点,所以模态键盘选项卡陷阱被打破了。
有人在这方面取得成功吗?
HTML 示例:
有效(我不需要在 iframe 上使用 javascript 设置焦点)
<input type="text" />
<iframe />
<input type="text" />
如果 iframe 是第一个或最后一个可聚焦元素,我将需要使用 javascript 设置焦点以保持模态键盘陷阱
<input type="text" />
<iframe />
或
<iframe />
<input type="text" />
javascript:
var KEY = {
TAB: 9,
},
allowedFocusableElements =
'a[href], area[href], input:not([disabled]):not([type="hidden"]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, *[tabindex], *[contenteditable]';
function openDialog(e) {
// Get focusable elements.
dialogFocusableElements = dialog.querySelectorAll(allowedFocusableElements);
dialogFirstElement = dialogFocusableElements[0];
dialogLastElement = dialogFocusableElements[dialogFocusableElements.length - 1];
document.addEventListener("keydown", processKeys);
}
function processKeys(event) {
if (event.keyCode === KEY.TAB && !event.shiftKey) {
if (document.activeElement === dialogLastElement) {
event.preventDefault();
dialogFirstElement.focus();
}
} else if (event.keyCode === KEY.TAB && event.shiftKey) {
if (document.activeElement === dialogFirstElement) {
event.preventDefault();
dialogLastElement.focus();
}
}
}
【问题讨论】:
标签: javascript html iframe