能否修改JavaScript的document.hasFocus()方法使其始终返回true?
如何让document.hasFocus()始终返回true以绕过焦点检测
当然可以实现!你只需要重写浏览器原生的document.hasFocus()方法,强制它每次调用都返回true,就能轻松绕过你提供的这段焦点检测逻辑。下面分两种常见场景给出具体实现:
1. 浏览器控制台临时测试
如果你只是想临时验证效果,直接打开浏览器开发者工具(按F12或Ctrl+Shift+I),切换到**控制台(Console)**标签,输入以下代码并回车:
document.hasFocus = () => true;
执行后,页面上的setInterval检测就会永远显示"The document has focus.",不管你是否点击页面外部。
2. 用户脚本长期生效(比如Tampermonkey)
如果你希望这个修改在特定页面每次加载都自动生效,可以用用户脚本工具(比如Tampermonkey、Violentmonkey)来实现。创建一个新脚本,粘贴以下代码:
// ==UserScript== // @name 强制文档始终处于聚焦状态 // @namespace tampermonkey-scripts // @version 0.1 // @description 让document.hasFocus()永远返回true,绕过焦点检测 // @author Your Name // @match *://目标网站的URL/* // @grant none // ==/UserScript== (function() { 'use strict'; // 覆盖原生的hasFocus方法 document.hasFocus = function() { return true; }; })();
- 把
@match里的*://目标网站的URL/*替换成你需要作用的页面地址(比如本地HTML文件可以写成file:///*); - 保存脚本后,打开目标页面,它就会自动生效,无需每次手动在控制台输入代码。
注意事项
- 这种重写只会对当前页面生效,刷新页面后如果没有用户脚本,方法会恢复原生行为;
- 针对你提供的这段简单的
setInterval检测逻辑,这个方法完全有效。如果遇到更复杂的焦点检测(比如结合window.onblur事件),可能需要额外处理blur/focus事件,但针对你给出的代码,上述方案足够解决问题。
内容的提问来源于stack exchange,提问作者Sion C




