如何将浏览器焦点从一个选项卡更改为另一个选项卡

IT技术 javascript focus
2021-01-27 12:24:11

我在一个浏览器选项卡(称为选项卡 A)中运行了一个 JavaScript 聊天客户端。现在,当消息到达时,用户可能在另一个浏览器选项卡上(称为选项卡 B)。当这样的消息到达时,我正在寻找将焦点从选项卡 B 更改为我的聊天客户端(选项卡 A)的方法。

我找不到办法做到这一点。

6个回答

这是不是可能-出于安全考虑。

除非“选项卡”是指在新选项卡中打开的窗口和弹出窗口(由于浏览器首选项)。如果是这种情况,那么是的,您可以。

//focus opener... from popup
window.opener.focus();

//focus popup... from opener
yourPopupName.focus(); 
@RobbieVercammen 不,这里调用的 focus() 方法是 window 对象上的一个方法。(类似于表单域上的原生 focus())
2021-03-26 12:24:11
window.opener.focus() 在选项卡式时对我不起作用stackoverflow.com/questions/17237542/...
2021-04-07 12:24:11
如果您在没有网络安全的情况下运行浏览器,是否有可能?是否可以通过在浏览器外运行的程​​序实现?是否有允许外部程序与浏览器通信并设置内容的 API?
2021-04-12 12:24:11

可以通过 Tab A 中的警报将焦点移回 Tab A,例如 alert('New Message')

但是,您需要小心使用它,因为它很可能会惹恼人们。只有在您的应用程序中将其设为可选时,才应使用它。否则,如 nc3b 所说,更新选项卡 A 的标题和/或网站图标似乎是最好的。

使用alert使此页面中的所有 js 停止。不是一个好的理想
2021-03-17 12:24:11

最好的方法可能是更改页面标题,提醒用户该选项卡需要注意(也许还有 favicon - 看看 meebo 是如何做到的,这真的很烦人但很有效)

Twitter 做了类似的事情,如果有新消息要阅读,它会增加计数,所以我同意这可能是最好的方法。
2021-04-06 12:24:11

Chrome 和 firefox 现在有通知。我认为通知可能是一种更用户友好的方式来提醒用户您的应用程序发生了某些变化,而不是弹出警报并强制他们进入您的页面。

这在表单提交上对我有用以重新打开目标窗口..所以它会在同一个目标上调用 window.open (或新的,如果更改),然后继续提交表单。

        var open_target = function (form){
            var windowName = jQuery(form).attr('target');
            window.open("", windowName );
            return true;
        };
    <form target="_search_elastic" onsubmit="return open_target(this);">
      </form>