我在一个浏览器标签中运行了一个JavaScript聊天客户端(称之为标签A)。现在,当消息到达时,用户可能在另一个浏览器选项卡上(称为选项卡B)。当这样的消息到来时,我正在寻找将焦点从标签B更改为聊天客户端(标签A)的方法。
我找不到办法做到这一点。
答案 0 :(得分:15)
由于安全问题, 不 可能。
除非按“tab”表示一个窗口和一个弹出窗口(由于浏览器首选项)在新选项卡中打开。如果是这种情况,那么你可以。
//focus opener... from popup
window.opener.focus();
//focus popup... from opener
yourPopupName.focus();
答案 1 :(得分:7)
可以通过标签A中的警告将焦点移回标签A,例如警报('新消息')
但是,你需要小心使用它,因为它很可能会惹恼人们。只有在应用程序中将其设为可选项时,才应使用它。否则,更新标签A的标题和/或图标似乎是最好的,因为nc3b说。
答案 2 :(得分:5)
最好你可能会更改页面的标题,提醒用户标签需要注意(也许还有图标 - 看看meebo是怎么做的,它真的很烦人但很有效)
答案 3 :(得分:4)
这对我来说在表单提交时重新打开目标窗口.. 所以它会在同一个目标上调用window.open(如果更改则调用new),然后继续提交表单。
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>
答案 4 :(得分:3)
使用Javascript,触发警报可以产生预期效果。在您的控制台中运行此代码,或在一个选项卡中添加到您的html文件,然后切换到同一浏览器中的另一个选项卡。
setTimeout(function(){
alert("Switched tabs");
},
5000);
超时后出现的警报将触发标签切换。或者你可以做类似的事情!但是,出于UX原因,您仍然可以在页面标题((1)Facebook)中使用Facebook的消息计数器中的ping或添加和指示符。您还可以尝试使用Notifications API(实验性)。
答案 5 :(得分:2)
Chrome和Firefox现在有通知。我认为通知可能是一种更加用户友好的方式,可以提醒用户您的应用上发生了更改,而不是弹出警报并强制他们访问您的网页。
答案 6 :(得分:0)
一些常规的基于chrome的浏览器可能会被chrome调试器协议控制,如果浏览器打开带有标志--remote-debugging-port=***
,我使用github上的工具cyrus-and/chrome-remote-interface
并调用CDP.Activate([options],callback)
方法进行切换浏览器选项卡。它适用于 New MS Edge,也适用于 chrome。但遗憾的是,这在 vivaldi 浏览器中不起作用,这是我想使用的功能最丰富的浏览器。