2010-04-24 4 views
12

Ich mag eine Schaltfläche auf einer Webseite mit folgendem Verhalten haben:Wie bringe ich in Google Chrome ein vorhandenes Popup-Fenster mithilfe von JavaScript aus dem übergeordneten Fenster in den Vordergrund?

  • Auf dem ersten Klick, ein Pop-up öffnen.
  • Bei späteren Klicks, wenn das Popup noch geöffnet ist, bringen Sie es einfach nach vorne. Wenn nicht, öffne es erneut.

Der Code unten funktioniert in Firefox (Mac & Windows), Safari (Mac & Windows) und IE8. (Ich habe IE6 oder IE7 noch nicht getestet.) In Google Chrome (beide Mac & Windows) führen spätere Klicks jedoch nicht dazu, das vorhandene Pop-up wie gewünscht an die Front zu bringen.

Wie kann ich das in Chrome machen?

<head> 
    <script type="text/javascript"> 
    var popupWindow = null; 
    var doPopup = function() { 
     if (popupWindow && !popupWindow.closed) { 
     popupWindow.focus(); 
     } else { 
     popupWindow = window.open("http://google.com", "_blank", 
      "width=200,height=200"); 
     } 
    }; 
    </script> 
</head> 

<body> 
    <button onclick="doPopup(); return false"> 
    create a pop-up 
    </button> 
</body> 

Hintergrund: Ich bin this question speziell für Google Chrome erneut zu fragen, wie ich glaube, ich mein Code, um das Problem zumindest für die modernen Browser und IE8 löst. Wenn es eine bevorzugte Etikette dafür gibt, lass es mich wissen.

+1

Sieht aus wie dieses Problem wurde vor ~ 1.5 Jahren berichtet: http://code.google.com/p/chromium/issues/detail?id=1674 – brahn

Antwort

8

Sie können nicht. Window.focus ist in Chrome aus Sicherheitsgründen deaktiviert, und das wird sich wahrscheinlich nicht ändern.

Sie müssen das entsprechende Fenster schließen und erneut öffnen.

+3

Oof, das ist frustrierend. Aus Neugier, was ist das Sicherheitsrisiko? Ich sehe eine Diskussion darüber, was in Verbindung stehen könnte [hier] (http://code.google.com/p/chromium/issues/detail?id=1383#c8), obwohl das mehr über den Popup Stealing Fokus scheint vom übergeordneten Fenster und nicht vom übergeordneten Fenster, das den Fokus auf das Popup richtet (was ich suche). Danke! – brahn

+1

Ich würde auch gerne über die damit verbundenen Probleme wissen. – marquito

+0

Nach all den Jahren ist das immer noch eine große Frustration als Benutzer, geschweige denn als Entwickler. Es wäre gut, wenn jemand eine Verbindung zu etwas herstellen würde, das den Grund schön erklärt, weil "aus Sicherheitsgründen" wie Eisenbahnunternehmen "zugunsten der Passagiere" sagt, wenn sie eine zweckmäßige Regelung auferlegen, die offensichtlich nicht ist. –

0

Warum nicht einfach eine popopWindow.focus() nach dem window.open Aufruf? Es wird nicht schaden, es auch dort zu tun, und es sollte sicherstellen, dass Ihr neues Fenster über dem aktuellen angezeigt wird.

+0

Der aktuelle Code führt zu dem gewünschten Verhalten (dh Popup an der Spitze) mit dem neuen Fenster - das Problem ist bei einem bestehenden Fenster. – brahn

0

Sie müssen das ursprüngliche Fenster zum Weichzeichnen und das neue Fenster zum Fokussieren festlegen.

var popup = { //popup = object literal representing your popup 
    execute = (function() { 
     popup.win = window.open(); 
     popup.win.focus(); 
    }()); 
}; 
window.blur(); 
+0

Ich bin mir nicht sicher, ob ich diesen Code verstehe, aber wie Chris Kommentar oben scheint es sicherzustellen, dass das Popup beim ersten Öffnen fokussiert ist, aber nichts unternimmt, um es auf einen späteren Buttonklick zu fokussieren. – brahn

+0

Das ist richtig. Für JavaScript gibt es keine "immer im Vordergrund" -Methode, und so etwas wird es nie geben. Wenn Sie außerhalb des Popup-Fensters klicken, verliert es den Fokus und fällt hinter das Fenster, das den Fokus erhält. Die einzige Möglichkeit, dies zu ändern, besteht darin, in das Popup-Fenster zurückzukehren. –

+0

OK, danke für die Klärung! – brahn

0

Der folgende Code funktioniert für mich, wenn in einem Onclick-Handler genannt:

var popup = window.open('', 'popup-name', 'resizable,width=480=height=575'); 

if(popup.location == 'about:blank') { 
    popup.location = 'http://google.com'; 
    return; 
} 

Dieser Code funktioniert, indem Sie versuchen die Popup-Standort, wenn es geht um den Zugriff auf: blank sein ein neues Pop-up und die URL ist eingestellt. Andernfalls, wenn das Fenster mit dem gleichen Namen 'popup-name' bereits geöffnet ist, wird das Popup angezeigt. Dieser Code muss von einem onclick-Handler aufgerufen werden, andernfalls wird es nicht funktionieren.

Verwandte Themen