调用window.focus()时focus事件未触发,是否为预期行为?
问题解答
这是预期行为,原因和浏览器对焦点事件的触发规则直接相关:
- 浏览器会限制脚本对窗口焦点的强制操控,只有当窗口实际从失焦状态切换到聚焦状态时,才会触发
focus事件。 - 你代码里的
window.blur()是脚本主动调用的,浏览器不会真的让窗口失去系统级焦点(除非这个操作是由用户交互触发的,比如点击按钮)。 - 1秒后调用
window.focus()时,窗口其实一直处于激活状态,自然不会触发focus事件。
如果想要验证触发逻辑,可以做个测试:
- 运行你的代码后,手动点击其他窗口让当前页面失焦
- 等待1秒后,脚本调用
window.focus()就会触发focus事件了
你的测试代码:
window.addEventListener("focus", (event) => console.warn(event)); window.blur(); setTimeout(() => { window.focus(); }, 1000);
内容的提问来源于stack exchange,提问作者Simon Ferndriger
相关产品推荐
相关产品推荐

