2010-04-24 4 views
14

Ich habe einen JavaScript-Chatclient, der in einem Browser-Tab ausgeführt wird (nennen Sie es Tab A). Wenn nun eine Nachricht eintrifft, befindet sich der Benutzer möglicherweise in einem anderen Browser-Tab (nennen Sie es Tab B). Ich suche nach Möglichkeiten, um den Fokus von Tab B zu meinem Chat-Client (Registerkarte A) zu ändern, wenn eine solche Nachricht ankommt.So ändern Sie den Browserfokus von einem Tab zum anderen

Ich konnte keinen Weg finden, dies zu tun.

+0

An diesem Punkt konnte der Fokus von Registerkarte zu Registerkarte mithilfe der ServiceWorker-API geändert werden. Es wäre auf jeden Fall ein Hack. –

Antwort

15

Es ist nicht möglich - aufgrund von Sicherheitsbedenken.

es sei denn mit "tab" meinst du ein Fenster und ein Popup-Fenster, das (aufgrund der Browsereinstellungen) in einem neuen Tab geöffnet wurde. Wenn dies der Fall ist, dann können Sie ja.

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

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

window.opener.focus() funktioniert nicht für mich, wenn Tabbed http://StackOverflow.com/questions/17237542/How-to-set-focus-to-child-and-opener-windows-when-tabbed – magritte

+0

The Fokusfunktion ist jQuery-only richtig? – DerpyNerd

+0

@RobbieVercammen no Die hier aufgerufene Methode focus() ist eine Methode für das Fensterobjekt. (Ähnlich dem nativen Fokus() auf Formularfelder) – scunliffe

5

Das Beste, was Sie würde wahrscheinlich dem Benutzer, den Titel der Seite zu ändern Alarmierung der Registerkarte Aufmerksamkeit muss sein könnte (vielleicht auch das Favicon - schauen, wie Meebo tut es, es ist wirklich ärgerlich, aber effektiv)

+0

Twitter tut etwas Ähnliches darin, dass es eine Zählung hinzufügt, wenn es neue Nachrichten zu lesen gibt, also stimme ich zu, das ist wahrscheinlich der beste Weg gehen. –

7

Es ist möglich, den Fokus wieder auf Tab A zu stellen, indem Sie in Tab A z alarm ('Neue Nachricht')

Allerdings müssen Sie vorsichtig sein, da dies sehr wahrscheinlich die Leute verärgert. Sie sollten es nur verwenden, wenn Sie es in Ihrer App optional machen. Andernfalls würde der Titel und/oder das Favicon von Tab A am besten aussehen, wie nc3b sagt.

+0

Mit 'alert' werden alle js auf dieser Seite gestoppt. Kein gutes Ideal – ntlam

3

Mit Javascript kann das Auslösen einer Warnung den gewünschten Effekt haben. Führen Sie diesen Code in Ihrer Konsole aus, oder fügen Sie Ihre HTML-Datei auf einer Registerkarte hinzu und wechseln Sie zu einer anderen Registerkarte im selben Browser.

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

Der Alarm, der nach dem Timeout erscheint, löst einen Tabulatorwechsel aus. Oder Sie können etwas Ähnliches tun! Aus UX-Gründen können Sie jedoch immer noch einen Ping oder Hinzufügen und Anzeigen wie im Facebook-Nachrichtenzähler im Seitentitel ((1) Facebook) verwenden. Sie können auch mit Notifications API (experimentell) experimentieren.

+1

Wert zu beachten, dass der Alarm innerhalb 'Fenster ausgelöst werden soll.Öffner ", nicht das eigentliche" Fenster ". –

3

dies funktionierte für mich auf Formular senden, um das Zielfenster wieder zu öffnen .. so wird es window.open auf dem gleichen Ziel aufrufen (oder neu, wenn geändert) und dann weiterhin das Formular absenden.

 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>

2

Chrome und Firefox jetzt Benachrichtigungen haben. Ich denke, Benachrichtigungen sind wahrscheinlich eine benutzerfreundlichere Methode, um den Benutzer darauf aufmerksam zu machen, dass sich in Ihrer App etwas geändert hat, anstatt eine Warnmeldung zu versenden und sie zu Ihrer Seite zu zwingen.