JavaScript wird in einem neuen Fenster geöffnet, nicht in einem Tab

364

Ich habe ein Auswahlfeld, das anruft, window.open(url)wenn ein Element ausgewählt wird. Firefox öffnet die Seite standardmäßig in einem neuen Tab. Ich möchte jedoch, dass die Seite in einem neuen Fenster geöffnet wird, nicht in einem neuen Tab.

Wie kann ich das erreichen?

Adam
quelle
3
siehe Beispiel bei " jsfiddle.net/HLbLu
Michael Freidgeim
Sie können github.com/reduardo7/xpopup
Eduardo Cuomo

Antworten:

456

Geben Sie dem Fenster einen 'specs'-Parameter mit Breite / Höhe. Sehen Sie hier für alle möglichen Optionen.

window.open(url, windowName, "height=200,width=200");

Wenn Sie eine Breite / Höhe angeben, wird diese in einem neuen Fenster anstelle einer Registerkarte geöffnet.

DNS
quelle
5
Guter Tipp. Ich denke, Opera wird dies trotzdem in einem Tab öffnen :).
Kevin Tighe
7
Arbeiten in IE6, FF 3.6, Chrome 9.0
James Westgate
3
Funktioniert in FF 11.0 nicht mehr, siehe meine Frage ! @ James
TMS
14
Funktioniert in heutigen Browsern nicht. Standardmäßig öffnen alle ein neues Fenster in einer neuen Registerkarte des aktuellen Fensters. Dies hängt auch von den Browseroptionen ab. Sie können es nicht mit JavaScript steuern.
Pavel Hodek
3
Dies ist NICHT die Tatsache, dass Sie "height = 200, width = 200" eingeben, um das Öffnen in einem neuen Fenster durchzuführen. Dies ist einfach die Tatsache, zusätzliche Parameter (Ort, Status usw. ... es spielt keine Rolle)
Peter
110

Sie müssen keine Höhe verwenden, stellen Sie nur sicher, dass Sie verwenden _blank. Ohne diese wird sie in einer neuen Registerkarte geöffnet.

Für ein leeres Fenster:

window.open('', '_blank', 'toolbar=0,location=0,menubar=0');

Für eine bestimmte URL:

window.open('http://www.google.com', '_blank', 'toolbar=0,location=0,menubar=0');
nwbrad
quelle
3
Aber was ist, wenn ich ihm auch einen Namen geben möchte?
Aditi
Zumindest in Chrome location=0ist dies erforderlich, wenn JS über eine Schaltfläche oder ein Ankerelement aufgerufen wird.
Ohad Schneider
hat perfekt funktioniert. musste auch location = 0 in Firefox aufnehmen.
Rick James
@nwbrad sind Sie sich über den Teil '_blank' sicher, da '_blank' meines Wissens der Standardwert ist, wenn wir keinen anderen Wert angeben. In Ihrem Fall hat das Öffnen eines neuen Fensters anstelle einer neuen Registerkarte etwas mit der Bereitstellung des dritten Parameters für die Funktion window.open zu tun. In Ihrem Fall ist es 'Symbolleiste = 0, Position = 0, Menüleiste = 0'. Sie können dies überprüfen, indem Sie diesen dritten Parameter weglassen und dort '_blank' als zweiten Parameter belassen.
user1451111
Funktioniert perfekt in modernen Browsern wie Firefox 76 und Internet Explorer 11. Der Tipp ist das Hinzufügen location=0der Parameter. Ich würde auch vorschlagen, das Fenster zu benennen, anstatt das _blankZiel zu verwenden, damit dasselbe Fenster erneut verwendet wird, wenn der Benutzer mehrmals auf das Element klickt, das das Popup öffnet, und mit dem es verkettet wird, focus()sodass bereits ein geöffnetes Popup den Fokus erhält:window.open('http://stackoverflow.com', 'Stack_Overflow','location=0').focus();
OuzoPower
82

Ich kann mich irren, aber soweit ich weiß, wird dies durch die Browsereinstellungen des Benutzers gesteuert, und ich glaube nicht, dass dies überschrieben werden kann.

Jordan S. Jones
quelle
1
Sie haben Recht, der Benutzer kann die Einstellung "about: config" browser.tabs.opentabfor.windowopen "auf true setzen, aber das ist eine globale Einstellung, und ich möchte das globale Verhalten der Browser unserer Benutzer nicht ändern;)
Adam
45
Ich habe dir gesagt, ich habe Code, der funktioniert. Ich habe dies in die Firebug-Konsole eingegeben: window.open ("", "poop", "height = 200, width = 200, modal = yes, alwaysRaised = yes"); und rate was??? Es klappt!!!!!!
24
Ja, es funktioniert, aber das scheint ein bisschen ein Hack zu sein. Firefox ist so geschrieben, dass das Öffnen eines neuen Fensters gegenüber einem Tab eine Browsereinstellung und keine Javascript-Voreinstellung ist. Daher ist es möglich, dass Ihr Vorschlag in einer späteren Version von Firefox nicht mehr funktioniert. Ich möchte mich lieber nicht auf einen Hack verlassen.
Adam
2
Und um klar zu sein, ich meine nicht, dass es ein Javascript-Hack ist. Das Hinzufügen von Fensterhöhe und -breite ist eindeutig ein Merkmal der Methode js window.open ( w3schools.com/HTMLDOM/met_win_open.asp ). Ich meine Hack im Sinne einer Manipulation des beabsichtigten Verhaltens von Firefox.
Adam
2
Ich würde es nicht wirklich als Hack bezeichnen. Sie machen nur Kompromisse bei dem Verhalten, das Sie tatsächlich haben möchten, und implementieren es stattdessen.
Matchu
15

Versuchen:

window.open("", [window name], "height=XXX,width=XXX,modal=yes,alwaysRaised=yes");

Ich habe einen Code, der das tut, was Sie sagen, aber es enthält viele Parameter. Ich denke, das ist das absolute Minimum. Lass es mich wissen, wenn es nicht funktioniert, werde ich den Rest posten.

arulmr
quelle
Dies funktioniert in FF 31 und Chrome 36 nur mit der Option "modal = yes". Alle angegebenen Optionen funktionieren ebenfalls. Ich habe auch "Neue Fenster stattdessen in neuen Registerkarten öffnen" in meinen FF-Einstellungen aktiviert. Ohne geöffnete Optionen werden Fenster in einer neuen Registerkarte geöffnet.
Clint Pachl
Nach einigen weiteren Tests scheinen fast alle Parameter - solange es mindestens einen gibt - ein neues Fenster anstelle einer Registerkarte zu öffnen. Zum Beispiel funktioniert nur "top = 0" sogar in FF 31 und Chrome 36. Dies ist unter OpenBSD mit dem cwm-Fenstermanager möglich. Die Ergebnisse können also variieren.
Clint Pachl
Darf ich wissen, was ist [Fenstername]?
Stück
10

OK, nachdem ich viele Tests gemacht habe, hier meine Schlussfolgerung:

Wenn Sie durchführen:

     window.open('www.yourdomain.tld','_blank');
     window.open('www.yourdomain.tld','myWindow');

oder was auch immer Sie in das Zielfeld eingeben, dies ändert nichts: Die neue Seite wird auf einer neuen Registerkarte geöffnet (also abhängig von den Benutzereinstellungen).

Wenn Sie möchten, dass die Seite in einem neuen "echten" Fenster geöffnet wird, müssen Sie zusätzliche Parameter eingeben. Mögen:

window.open('www.yourdomain.tld', 'mywindow','location=1,status=1,scrollbars=1, resizable=1, directories=1, toolbar=1, titlebar=1');

Nach dem Testen scheint der zusätzliche Parameter, den Sie verwenden, keine Rolle zu spielen: Dies ist nicht die Tatsache, dass Sie "diesen Parameter" oder "diesen anderen" eingeben, die das neue "echte Fenster" erstellen, sondern die Tatsache, dass es neue Parameter gibt ).

Aber etwas ist verwirrt und kann viele falsche Antworten erklären:

Diese:

 win1 = window.open('myurl1', 'ID_WIN');
 win2 = window.open('myurl2', 'ID_WIN', 'location=1,status=1,scrollbars=1');

Und das:

 win2 = window.open('myurl2', 'ID_WIN', 'location=1,status=1,scrollbars=1');
 win1 = window.open('myurl1', 'ID_WIN');

wird NICHT das gleiche Ergebnis geben.

Im ersten Fall wird beim Öffnen einer Seite ohne zusätzliche Parameter eine neue Registerkarte geöffnet . In diesem Fall wird aufgrund des von Ihnen angegebenen Namens auch der zweite Anruf auf dieser Registerkarte geöffnet .

Im zweiten Fall, wenn Ihr erster Aufruf mit zusätzlichen Parametern erfolgt, wird die Seite in einem neuen " echten Fenster " geöffnet . Und in diesem Fall wird der zweite Aufruf, auch wenn er ohne den zusätzlichen Parameter erfolgt, auch in diesem neuen " echten Fenster " geöffnet ... aber auf derselben Registerkarte!

Dies bedeutet, dass der erste Aufruf wichtig ist, da entschieden wird, wo die Seite platziert werden soll.

Peter
quelle
Diese Antwort sollte viele ++++ haben
Mitch VanDuyn
9

Das solltest du nicht brauchen. Ermöglichen Sie dem Benutzer, die gewünschten Einstellungen vorzunehmen.

Firefox macht das standardmäßig, weil das Öffnen einer Seite in einem neuen Fenster ärgerlich ist und eine Seite dies niemals dürfen sollte, wenn dies vom Benutzer nicht gewünscht wird. (Mit Firefox können Sie Registerkarten in einem neuen Fenster öffnen, wenn Sie dies so einstellen.)

CookieOfFortune
quelle
31
du bist so falsch. und übrigens ist es nicht angebracht zu sagen, "du solltest es nicht brauchen", besonders wenn es etwas ist, was der Chef will
8
Versuchen wir, die Kommentare praktisch und hilfreich zu halten. Wir können nicht zustimmen, ohne beleidigend zu sein.
Adam
17
@theman_on_vista: Es liegt in Ihrer Verantwortung, Ihren Chef zu überzeugen . Ihr Unternehmen hat Ihnen die Verantwortung übertragen, Designprobleme zu lösen. Dies beinhaltet das Aufzeigen falscher Designideen.
EFraim
2
So wahr. Der Bildschirm gehört dem Benutzer und niemand anderem.
Christopher Creutzig
12
Es liegt im Bereich des Designers, Popup oder Tab auszuwählen. Während ich ein Benutzer bin, der Tabs immer bevorzugt, erkenne ich, dass das Design manchmal wirklich ein Popup oder wirklich einen Tab erfordert. Es sollte im Bereich des Programmierers liegen, dies zu ermöglichen. Abgesehen von philosophischen Unterschieden ist diese Art von Kommentar für eine Programmierreferenzseite völlig ungeeignet. Und in diesem Fall ist es kein "sollte ich?" Frage. Es ist "wie mache ich?"
Jbenet
9

Sie könnten folgende Funktion ausprobieren:

<script type="text/javascript">
function open(url)
{
  var popup = window.open(url, "_blank", "width=200, height=200") ;
  popup.location = URL;
}
</script>

Der HTML-Code für die Ausführung:

<a href="#" onclick="open('http://www.google.com')">google search</a>
jgray
quelle
2
Was ist der Zweck der popup.location = URL;? Der window.open()Aufruf sollte es für die richtige URL öffnen und ist in Ihrem Codebeispiel URLnicht definiert, sodass auf das experimentelle (und nicht allgemein unterstützte) URL-Objekt zurückgegriffen wird . Während es umstritten ist, es dafür zu verwenden, bin ich neugierig, was die Motive für seine Verwendung hier sind?
Ken
Solide Antwort und brachte mir bei, wie man den Ort nicht bearbeitbar macht. danke
VirtualProdigy
6

Der Schlüssel sind die Parameter:

Wenn Sie liefern Parameter [Height = „“, width = „“], dann wird es in einem neuen Fenster öffnen.

Wenn Sie KEINE Parameter angeben, wird diese in einer neuen Registerkarte geöffnet.

Getestet in Chrome und Firefox

MuniR
quelle
1
newwin = window.open ('test.aspx', '', ''); getestet in Chrome: 26
MuniR
5

Interessanterweise stellte ich fest, dass eine leere Zeichenfolge (im Gegensatz zu einer Nullzeichenfolge oder einer Liste von Eigenschaften) für das dritte Attribut von window.open in einer neuen Registerkarte für Chrome, Firefox und IE geöffnet wird. Bei Abwesenheit war das Verhalten anders.

Das ist also mein neuer Anruf:

 window.open(url, windowName, '');
Tom Lianza
quelle
Versucht das Originalposter nicht, Popups in einem neuen Fenster zu öffnen? In IE 11 öffnet das von Ihnen angegebene Codefragment ein neues Fenster oder eine neue Registerkarte, basierend auf den Browsereinstellungen des Benutzers.
4

versuchen Sie diese Methode .....

function popitup(url) {
       //alert(url);
       newwindow=window.open("http://www.zeeshanakhter.com","_blank","toolbar=yes,scrollbars=yes, resizable=yes, top=500, left=500, width=400, height=400");
       newwindow.moveTo(350,150);
   if (window.focus) 
          {
             newwindow.focus()
          }
   return false;
  }
Zeeshan Akhter
quelle
3

Für mich war die Lösung zu haben

"location=0"

im 3. Parameter. Getestet auf dem neuesten FF / Chrome und einer alten Version von IE11

Der vollständige Methodenaufruf, den ich verwende, ist unten (da ich gerne eine variable Breite verwende):

window.open(url, "window" + id, 'toolbar=0,location=0,scrollbars=1,statusbar=1,menubar=0,resizable=1,width=' + width + ',height=800,left=100,top=50');
DAustin
quelle
2

Ich habe es gerade mit IE (11) und Chrome (54.0.2794.1 Canary SyzyASan) versucht:

window.open(url, "_blank", "x=y")

... und es öffnete sich in einem neuen Fenster.

Was bedeutet, dass Clint Pachl es richtig gemacht hat, als er sagte, dass die Angabe eines Parameters dazu führt, dass das neue Fenster geöffnet wird.

- und anscheinend muss es kein legitimer Parameter sein!

(YMMV - wie gesagt, ich habe es nur an zwei Stellen getestet ... und das nächste Upgrade könnte die Ergebnisse auf jeden Fall ungültig machen.)

ETA: Ich habe es gerade bemerkt - im IE hat das Fenster keine Dekorationen.

theGleep
quelle
1

Beantwortet hier . Aber poste es noch einmal als Referenz.

window.open()wird nicht in der neuen Registerkarte geöffnet, wenn dies beim tatsächlichen Klickereignis nicht der Fall ist. In dem angegebenen Beispiel wird die URL beim tatsächlichen Klickereignis geöffnet. Dies funktioniert, sofern der Benutzer über die entsprechenden Einstellungen im Browser verfügt.

<a class="link">Link</a>
<script  type="text/javascript">
     $("a.link").on("click",function(){
         window.open('www.yourdomain.com','_blank');
     });
</script>

Wenn Sie versuchen, einen Ajax-Aufruf innerhalb der Klickfunktion auszuführen und bei Erfolg ein Fenster öffnen möchten, stellen Sie sicher, dass Sie den Ajax-Aufruf mit festgelegter async : falseOption ausführen.

Venkat Kotra
quelle
1

Ich denke, es ist kein Problem mit den HTML-Zieleigenschaften, aber Sie haben die Option "Neue Fenster in einem neuen Tab öffnen" im Menü "Tab" im Firefox-Menü "Optionen" deaktiviert. Überprüfen Sie es und versuchen Sie es erneut.

Geben Sie hier die Bildbeschreibung ein

Shihab mm
quelle
0

Ich hatte dieselbe Frage, fand aber eine relativ einfache Lösung dafür.

In JavaScript habe ich nachgefragt window.opener !=null;, ob das Fenster ein Popup ist. Wenn Sie einen ähnlichen Erkennungscode verwenden, um festzustellen, ob das Fenster, in dem Ihre Site gerendert wird, ein Popup ist, können Sie es einfach "deaktivieren", wenn Sie ein "neues" Fenster mit dem neuen Windows-JavaScript öffnen möchten .

Setzen Sie dies einfach oben auf Ihre Seite, um immer ein "neues" Fenster zu sein.

<script type="text/javascript">
    window.opener=null;
</script>

Ich verwende dies auf der Anmeldeseite meiner Website, damit Benutzer kein Popup-Verhalten erhalten, wenn sie ein Popup-Fenster verwenden, um zu meiner Website zu navigieren.

Sie können sogar eine einfache Weiterleitungsseite erstellen, die dies tut und dann zu der URL wechselt, die Sie ihr gegeben haben. Etwas wie,

JavaScript auf der übergeordneten Seite:

window.open("MyRedirect.html?URL="+URL, "_blank");

Und dann können Sie mit ein wenig Javascript von hier aus die URL abrufen und dorthin umleiten.

JavaScript auf Weiterleitungsseite:

 <script type="text/javascript">
        window.opener=null;

    function getSearchParameters() {
          var prmstr = window.location.search.substr(1);
          return prmstr != null && prmstr != "" ? transformToAssocArray(prmstr) : {};
    }

    function transformToAssocArray( prmstr ) {
        var params = {};
        var prmarr = prmstr.split("&");
        for ( var i = 0; i < prmarr.length; i++) {
            var tmparr = prmarr[i].split("=");
            params[tmparr[0]] = tmparr[1];
        }
        return params;
    }

    var params = getSearchParameters();
    window.location = params.URL;
    </script>
Dan
quelle