it-swarm.com.de

stellen Sie jedes Mal den Fokus eines Popup-Fensters ein

Ich habe zwei Seiten one.html und two.html

Ich öffne ein neues Fenster mit folgendem Code 

//here popup is a global variable
popup=window.open('two.html','two');

zum ersten Mal ein Popup-Fenster erfolgreich geöffnet und den Fokus erhalten, aber Wenn ich versuche, es erneut zu öffnen, ohne das bereits geöffnete Popup-Fenster zu schließen, wird das zweite Mal nicht von zwei.html fokussiert.

hinweis: Ich habe den Namen des Popup-Fensters als "Zwei" festgelegt.

16
hunt

sie können dies mit der unten beschriebenen focus-Funktion erreichen 

<script language="javascript" type="text/javascript">
<!--
function popitup(url) {
    newwindow=window.open(url,'name','height=200,width=150');
    if (window.focus) {newwindow.focus()}

      if (!newwindow.closed) {newwindow.focus()}
    return false;
}

// -->
</script>
12
Pranay Rana
focusedWindow = window.open('two.html','two').focus();

Hängen Sie den Fokus () direkt an den Prototyp von window.open

8
RobertPitt

Meine empirische Lösung, die immer funktioniert:

setTimeout('detail.focus()', 1);

Das Anhängen von .focus() direkt nach dem Öffnen funktioniert nicht immer oder der Aufruf einer .focus() ohne setTimeout.

Ich weiß, es ist hässlich (wollte es jetzt nach einigen Jahren ohne Erfolg loswerden), und ich weiß nicht genau, warum und wie, aber es funktioniert.

6
Roman
var win = window.open('two.html','two');
win.document.getElementsByTagName("body")[0].focus(); //focus the body rather than the window.
2
James

Überprüfen Sie Ihre Firefox 2-Einstellungen unter 

  1. Gehen Sie zu Extras -> Optionen -> Inhalt 
  2. Vergewissern Sie sich, dass "JavaScript aktivieren" aktiviert ist. 
  3. Klicken Sie neben "JavaScript aktivieren" auf die Schaltfläche "Erweitert". 
  4. Stellen Sie sicher, dass das Kontrollkästchen mit einem Häkchen versehen ist [x] Fenster anheben oder absenken 

Wenn die Einstellung "Fenster erhöhen oder senken" deaktiviert ist, wird die Methode window.focus () deaktiviert. 

1
Sachin Shanbhag

Sie können das Popup schließen, bevor Sie es öffnen, wenn Sie beim Aufruf der Funktion prüfen, ob das Popup bereits geöffnet ist.

var popup;
​function openPop() { 
    if ("close" in popup) popup.close();
    popup = window.open("http://stackoverflow.com", "test", "width=200, height=200");​​​​​​​​
}

Dadurch wird sichergestellt, dass das Popup immer oben angezeigt wird.

1
Andy E

Ich habe eine Antwort für mich gefunden, die funktioniert. Fügen Sie in der HTML-Datei des Popup-Body den Body-Tag onload = "this.window.focus ()" hinzu. Selbst wenn Sie das Fenster minimieren, wird es vorne und in der Mitte wieder angezeigt. Vergewissern Sie sich und benennen Sie das Fenster in Ihrem Ausführungsskript window.open ('url', 'irgendein Name', 'vars'); Hoffe das hilft dir!

0
mdavis6763
setTimeout(function () { 
  window.open('PageName', '', 'height=560,width=1120,resizable=no,left=100,top=50,screenX=100,screenY=50'); 
}, 100);

-> Dieser Code wird verwendet, um den Fokus auf neu geöffnete Fenster zu legen .-> Setzen Sie es in Javascript. ('SetTimeout ist eingebaute Funktion von Javascript') -> Wenn Popup-Fenster geöffnet ist, passiert es oft wird hinter dem alten Fenster gehen, also oben ist es sehr nützlich, für neues Fenster zu fokussieren.

0
user2338552

Es ist eine Einliner-Lösung, verwenden Sie den Fokus auf Ihrem Popup-Var:

popup=window.open('two.html','two');
popup.focus();

Dadurch wird das Popup-Fenster immer geöffnet, auch wenn es nicht geschlossen ist.

Leider unterstützen einige moderne Browser immer noch keine Registerkarten, siehe zum Beispiel diesen Firefox-Bugeintrag .

Der folgende Code funktioniert jedoch gut für mich. Als Problemumgehung wird ein Fenster/eine Registerkarte erneut geöffnet, wenn es nicht fokussiert werden kann:

  var win = window.open("two.html", "two")
  win.focus();
  setTimeout(function() {
    if(document.hasFocus()) {
      win.close();
      window.open("two.html", "two")
    }
  }, 1);

In der ersten Zeile wird das Fenster geöffnet und es wird versucht, es mit der zweiten Zeile zu fokussieren. Wenn bereits ein Fenster mit dem Namen two vorhanden ist, wird kein neues Fenster/Tab geöffnet, es wird jedoch wiederverwendet.

Der Trick ist jetzt, dass wir mit document.hasFocus() prüfen, ob das aktuelle Fenster noch den Fokus hat. Wenn ja, schließen wir das Fenster und öffnen es erneut. Dies gilt nur für Browser, die das Scharfstellen der Registerkarte, die direkt wiederverwendet werden soll, nicht unterstützen. Derzeit ist dies für FF und IE/MS Edge der Fall. Chrome funktioniert gut.

Direkt nach der Verwendung von window.open gibt document.hasFocus() jedoch immer true zurück (so auch in Chrome). Die Problemumgehung besteht darin, setTimeout eine ms später zu verwenden.

0
sibbl