Merge pull request #12405 from nickyc975/fixed-active-element-in-shadow-dom

Fixed keydown event handling problem with shadow DOM.
This commit is contained in:
Tim van der Meij 2020-09-26 23:02:13 +02:00 committed by GitHub
commit 6728c8fa61
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 25 additions and 1 deletions

View File

@ -19,6 +19,7 @@ import {
AutoPrintRegExp,
DEFAULT_SCALE_VALUE,
EventBus,
getActiveOrFocusedElement,
getPDFFileNameFromURL,
isValidRotation,
isValidScrollMode,
@ -2829,7 +2830,7 @@ function webViewerKeyDown(evt) {
// Some shortcuts should not get handled if a control/input element
// is selected.
const curElement = document.activeElement || document.querySelector(":focus");
const curElement = getActiveOrFocusedElement();
const curElementTagName = curElement && curElement.tagName.toUpperCase();
if (
curElementTagName === "INPUT" ||

View File

@ -985,6 +985,28 @@ function moveToEndOfArray(arr, condition) {
}
}
/**
* Get the active or focused element in current DOM.
*
* Recursively search for the truly active or focused element in case there are
* shadow DOMs.
*
* @returns {Element} the truly active or focused element.
*/
function getActiveOrFocusedElement() {
let curRoot = document;
let curActiveOrFocused =
curRoot.activeElement || curRoot.querySelector(":focus");
while (curActiveOrFocused && curActiveOrFocused.shadowRoot) {
curRoot = curActiveOrFocused.shadowRoot;
curActiveOrFocused =
curRoot.activeElement || curRoot.querySelector(":focus");
}
return curActiveOrFocused;
}
export {
AutoPrintRegExp,
CSS_UNITS,
@ -1026,4 +1048,5 @@ export {
WaitOnType,
waitOnEventOrTimeout,
moveToEndOfArray,
getActiveOrFocusedElement,
};