diff --git a/crates/mdbook-html/front-end/js/book.js b/crates/mdbook-html/front-end/js/book.js
index ed1dfca4..fe74b710 100644
--- a/crates/mdbook-html/front-end/js/book.js
+++ b/crates/mdbook-html/front-end/js/book.js
@@ -24,7 +24,10 @@ function playground_text(playground, hidden = true) {
* @returns {boolean} True if the keypress handler should be skipped.
*/
function mdbook_something_else_has_focus(e) {
- return /^(?:input|select|textarea)$/i.test(e.target.nodeName);
+ // Check composedPath in case the event happened from something generated
+ // from the shadowDOM.
+ const target = e.composedPath()[0] || e.target;
+ return /^(?:input|select|textarea)$/i.test(target.nodeName);
}
(function codeSnippets() {
diff --git a/tests/gui/shadow-dom.goml b/tests/gui/shadow-dom.goml
index b1f11210..2b401f20 100644
--- a/tests/gui/shadow-dom.goml
+++ b/tests/gui/shadow-dom.goml
@@ -8,11 +8,13 @@ press-key: 'x'
wait-for: '#shadow-input-host'
// See what happens when the s key is pressed.
press-key: 's'
-wait-for-css-false: ("#mdbook-search-wrapper", {"display": "none"})
+wait-for: 200
+wait-for-css: ("#mdbook-search-wrapper", {"display": "none"})
// Also try the global key handlers.
reload:
press-key: 'x'
wait-for: '#shadow-input-host'
press-key: '?'
-wait-for-css: ("#mdbook-help-container", {"display": "flex"})
+wait-for: 200
+wait-for-css: ("#mdbook-help-container", {"display": "none"})