Userscript 不会取消对某些页面上文本输入的关注
Userscript won't un-focus the text input on some pages
我有一个小的 Greasemonkey 脚本,它可以分散所有内容的焦点,只 return 将焦点放在网页的顶层。
代码如下所示:
document.addEventListener('keydown', function(event) {
if (event.ctrlKey && event.keyCode === 32) {
document.activeElement.blur()
}
}, true);
除了 WhatsApp Web,它在我使用的所有网页上都运行良好。它会立即重新聚焦消息输入框。
我在 Firefox 中关闭了自动对焦。
如何才能真正做到万无一失?连 WhatsApp 网页消息输入框都没有。
浏览器控制台中是否有任何错误或消息?您使用的是什么版本的浏览器?
无论如何,无需创建 WhatsApp 帐户或发布 MCVE,此处 一些 种可能性:
- 页面使用JS重设焦点--由
keydown
触发。
- 页面使用 JS 重置焦点 -- 由其他东西触发。
- 该页面已重置默认活动元素((过去)在某些浏览器上可能)。
- 页面已覆盖
document.activeElement.blur()
此代码可能有效:
document.addEventListener ('keydown', zEvent => {
if (zEvent.ctrlKey && zEvent.keyCode === 32) {
let actElem = document.activeElement;
if (actElem) actElem.blur ();
else console.error ("document.activeElement is unset");
zEvent.preventDefault ();
zEvent.stopImmediatePropagation ();
}
}, true);
如果没有,并且浏览器控制台中没有相关消息,运行 来自控制台的信息:
console.log (document.activeElement.blur.toSource() );
看看是不是原生函数。
您可以尝试的另一件事是查找或创建不同的输入并 .focus()
它。 (document.body.focus()
经常不行,唉。)
否则,您必须找到正在重置焦点的 javascript 并阻止它。如何做这样的事情完全取决于页面代码是什么。这是一个不同的问题,但其他 Stack Overflow 问题已经涵盖了各种机制。
我有一个小的 Greasemonkey 脚本,它可以分散所有内容的焦点,只 return 将焦点放在网页的顶层。
代码如下所示:
document.addEventListener('keydown', function(event) {
if (event.ctrlKey && event.keyCode === 32) {
document.activeElement.blur()
}
}, true);
除了 WhatsApp Web,它在我使用的所有网页上都运行良好。它会立即重新聚焦消息输入框。
我在 Firefox 中关闭了自动对焦。
如何才能真正做到万无一失?连 WhatsApp 网页消息输入框都没有。
浏览器控制台中是否有任何错误或消息?您使用的是什么版本的浏览器?
无论如何,无需创建 WhatsApp 帐户或发布 MCVE,此处 一些 种可能性:
- 页面使用JS重设焦点--由
keydown
触发。 - 页面使用 JS 重置焦点 -- 由其他东西触发。
- 该页面已重置默认活动元素((过去)在某些浏览器上可能)。
- 页面已覆盖
document.activeElement.blur()
此代码可能有效:
document.addEventListener ('keydown', zEvent => {
if (zEvent.ctrlKey && zEvent.keyCode === 32) {
let actElem = document.activeElement;
if (actElem) actElem.blur ();
else console.error ("document.activeElement is unset");
zEvent.preventDefault ();
zEvent.stopImmediatePropagation ();
}
}, true);
如果没有,并且浏览器控制台中没有相关消息,运行 来自控制台的信息:
console.log (document.activeElement.blur.toSource() );
看看是不是原生函数。
您可以尝试的另一件事是查找或创建不同的输入并 .focus()
它。 (document.body.focus()
经常不行,唉。)
否则,您必须找到正在重置焦点的 javascript 并阻止它。如何做这样的事情完全取决于页面代码是什么。这是一个不同的问题,但其他 Stack Overflow 问题已经涵盖了各种机制。