点击body打开新标签页后保持当前窗口焦点的实现求助
让新标签页后台打开并保留当前窗口焦点
我来帮你解决这个问题——点击页面body时打开新标签页,但不让焦点跳转到新窗口,这个需求可以通过调整window.open后的焦点控制逻辑实现。
默认情况下window.open()会自动把焦点切换到新打开的标签页,我们只需要在打开新窗口后,立刻让新窗口失焦,同时把焦点切回当前页面即可。
修改后的完整代码
先保留你原来的Cookie操作函数,然后更新redirectToTarget函数:
/** * For writing cookie * @param name {String} name of the cookie * @param value {*} value of the cookie * @param days {Number} number of days */ function setCookie(name,value,days) { var expires = ""; if (days) { var date = new Date(); date.setTime(date.getTime() + (days*24*60*60*1000)); expires = "; expires=" + date.toUTCString(); } document.cookie = name + "=" + (value || "") + expires + "; path=/"; } /** * Get cookie by a name * @param name {String} * @returns {*} */ function getCookie(name) { var nameEQ = name + "="; var ca = document.cookie.split(';'); for(var i=0;i < ca.length;i++) { var c = ca[i]; while (c.charAt(0)==' ') c = c.substring(1,c.length); if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); } return null; } /** * Check for already redirected or not. If not then redirect to targeted site. */ function redirectToTarget() { var isAlreadyRedirected = getCookie('redirect'); if (null === isAlreadyRedirected) { setCookie('redirect', 1, 30); // write for 1 month // 打开新窗口后立刻切回当前页面焦点 const newTab = window.open('https://www.google.com'); if (newTab) { newTab.blur(); window.focus(); } } }
关键注意点
- 这个方案依赖
blur()(让新窗口失焦)和focus()(让当前页面重获焦点)方法,Chrome、Firefox、Edge等主流现代浏览器都支持该操作 - 必须确保操作是用户主动触发的(比如你的
onclick事件),否则浏览器的弹窗拦截机制会阻止新窗口打开,同时焦点切换也不会生效 - 少数浏览器可能因隐私设置或版本限制,不允许强制切换焦点,但常规用户交互场景下这个方案完全可行
调用方式不变
依然通过body的onclick事件触发:
<body onclick="redirectToTarget()">
内容的提问来源于stack exchange,提问作者Zakaria Shahed
相关产品推荐
相关产品推荐

