Chrome 62.0.3202.94版本下如何在后台打开新窗口?
在Chrome 62.0.3202.94中后台打开新窗口的问题解答
首先得明确:你遇到的情况是Chrome刻意设计的行为——为了提升用户体验和安全性,Chrome会强制让通过脚本打开的新窗口获得焦点,尤其是在非用户主动触发的上下文(比如直接在控制台运行函数)中,你调用的blur()和focus()方法基本会被浏览器的安全策略拦截。
为什么你的三个函数都失效了?
test1():你尝试让新窗口失焦、原窗口获焦,但Chrome会优先保证新打开的窗口处于前台,这个操作会被浏览器的安全策略直接拦截。test2():通过打开空白窗口再关闭的方式试图抢回焦点,但同样,Chrome会把目标窗口(stackoverflow)置顶,这个小技巧在更早的Chrome版本可能有效,但62版本已经被修复了。test3():带参数的窗口打开+失焦操作,本质和test1一样,焦点控制指令不被执行。
有没有可行的实现方式?
只有在用户主动交互的上下文中(比如点击页面上的按钮、链接),你才有机会尝试让新窗口在后台打开,比如绑定一个点击事件:
// 先运行这段代码绑定事件,再点击页面任意位置触发 document.addEventListener('click', function() { const url = "https://stackoverflow.com/"; const newWindow = window.open(url); // 尝试让新窗口失焦,原窗口获焦 newWindow.blur(); window.focus(); });
绑定完成后,再次点击页面,新窗口会打开,但Chrome可能还是会让它短暂闪一下再回到原窗口——这已经是能做到的极限了,因为Chrome的核心原则就是避免网站偷偷在后台打开窗口干扰用户,不会完全允许静默后台打开的操作。
内容的提问来源于stack exchange,提问作者iBug
相关产品推荐
相关产品推荐

