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

Javascript 如何将浏览器焦点从一个选项卡更改为另一个选项卡,javascript,focus,Javascript,Focus,我有一个JavaScript聊天客户端运行在一个浏览器选项卡中(称为tab a)。现在,当消息到达时,用户可能在另一个浏览器选项卡上(称为选项卡B)。当这样的消息到达时,我正在寻找将焦点从选项卡B更改为聊天客户端(选项卡A)的方法 我找不到这样做的方法 出于安全考虑,这是不可能的 除非“选项卡”是指(由于浏览器首选项)在新选项卡中打开的窗口和弹出窗口。如果是这样,那么是的,你可以 //focus opener... from popup window.opener.focus(); //foc

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

我找不到这样做的方法

出于安全考虑,这是不可能的

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

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

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

您最好更改页面标题,提醒用户选项卡需要注意(也可能是favicon-看看meebo是怎么做的,这真的很烦人但很有效)

可以通过选项卡A中的警报将焦点移回选项卡A,例如警报(“新消息”)


然而,你需要小心使用它,因为它很可能会惹恼人们。只有在应用程序中将其设置为可选时,才能使用它。否则,正如nc3b所说,更新选项卡A的标题和/或favicon似乎是最好的。使用Javascript触发警报可以达到预期效果。在控制台中运行此代码,或者在一个选项卡中添加到html文件,然后切换到同一浏览器中的另一个选项卡

setTimeout(function(){ 
    alert("Switched tabs");
}, 
5000);

超时后出现的警报将触发tab开关。或者你也可以做类似的事情!但是,出于用户体验的原因,您仍然可以在页面标题((1)Facebook)中的Facebook消息计数器中使用ping或add and指示符。您还可以使用(实验)进行实验

这对我在表单提交中重新打开目标窗口起到了作用。。 因此,它将在同一目标上调用window.open(如果更改,则调用new),然后继续提交表单

var open\u target=函数(形式){
var windowName=jQuery(form).attr('target');
window.open(“,windowName”);
返回true;
};


Chrome和firefox现在有了通知。我认为通知可能是一种更为用户友好的方式来提醒用户你的应用程序发生了变化,而不是弹出通知并将其强制放到你的页面上。

Twitter也做了类似的事情,如果有新消息要阅读,它会增加一个计数,因此我同意这可能是最好的方式。window.opener.focus()当使用tabbed@RobbieVercammen no时,对我不起作用这里调用的focus()方法是窗口对象上的一个方法。(与表单字段上的本机focus()类似)如果在没有web安全性的情况下运行浏览器,是否可能?是否可以从浏览器外部运行的程序中执行此操作?是否有允许外部程序与浏览器通信和设置内容的API?值得注意的是,警报应在
窗口内触发。打开器
,而不是实际的
窗口
。此时,可以使用ServiceWorker API实现从一个选项卡到另一个选项卡的焦点切换。不过,这可能是一种黑客行为。使用
alert
可以停止此页面中的所有js。不太理想