JavaScript abierto en una nueva ventana, no pestaña

364

Tengo un cuadro de selección que llama window.open(url)cuando se selecciona un elemento. Firefox abrirá la página en una nueva pestaña de forma predeterminada. Sin embargo, me gustaría que la página se abra en una nueva ventana, no en una nueva pestaña.

¿Cómo puedo lograr esto?

Adán
fuente
3
ver ejemplo en " jsfiddle.net/HLbLu
Michael Freidgeim
Puede usar github.com/reduardo7/xpopup
Eduardo Cuomo

Respuestas:

456

Dele a la ventana un parámetro 'especificaciones' con ancho / alto. Vea aquí todas las opciones posibles.

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

Cuando especifique un ancho / alto, lo abrirá en una nueva ventana en lugar de una pestaña.

DNS
fuente
55
Buen consejo. Creo que Opera todavía abrirá esto en una pestaña :).
Kevin Tighe el
77
Trabajando en IE6, FF 3.6, Chrome 9.0
James Westgate
3
Ya no funciona en FF 11.0, ¡ mira mi pregunta ! @James
TMS
14
No funciona en los navegadores de hoy. Por defecto, todos abren una nueva ventana en una nueva pestaña de la ventana actual. También depende de las opciones del navegador. No puedes controlarlo usando JavaScript.
Pavel Hodek
3
Este NO es el hecho de que pones "altura = 200, ancho = 200" que realizan la apertura en una nueva ventana. Esto es simplemente el hecho de poner un parámetro adicional (ubicación, estado, etc ... no importa)
Peter
110

No necesita usar la altura, solo asegúrese de usar _blank, sin ella, se abre en una nueva pestaña.

Para una ventana vacía:

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

Para una URL específica:

window.open('http://www.google.com', '_blank', 'toolbar=0,location=0,menubar=0');
nwbrad
fuente
3
¿Pero qué pasa si quiero darle un nombre también?
Aditi
Al menos en Chrome, location=0es necesario cuando se invoca el JS desde un botón o elemento de anclaje.
Ohad Schneider
Funcionó perfectamente. tuvo que incluir location = 0 también en firefox.
Rick james
@nwbrad, ¿está seguro de la parte '_blank' porque, hasta donde yo sé, '_blank' es el valor predeterminado cuando no especificamos ningún otro valor? En su caso, abrir una nueva ventana en lugar de una nueva pestaña tiene que hacer algo al proporcionar el tercer parámetro a la función window.open. En su caso es 'barra de herramientas = 0, ubicación = 0, barra de menú = 0'. Puede verificarlo omitiendo este tercer parámetro y dejando '_blank' allí como el segundo parámetro.
user1451111
Funciona perfectamente en navegadores modernos como Firefox 76 e Internet Explorer 11. El consejo es agregar location=0los parámetros. También sugeriría nombrar la ventana en lugar de usar el _blankobjetivo, de modo que la misma ventana se vuelva a usar si el usuario hace clic varias veces en el elemento que abre la ventana emergente y se encadena focus()para que una ventana emergente abierta obtenga el foco:window.open('http://stackoverflow.com', 'Stack_Overflow','location=0').focus();
OuzoPower
82

Puedo estar equivocado, pero por lo que entiendo, esto está controlado por las preferencias del navegador del usuario, y no creo que esto pueda ser anulado.

Jordan S. Jones
fuente
1
Tiene razón, el usuario puede establecer "about: config" preferencia "browser.tabs.opentabfor.windowopen" en true, pero esa es una configuración global y no quiero cambiar el comportamiento global de los navegadores de nuestros usuarios;)
adam
45
Te dije que tengo un código que funciona. Escribí esto en la consola firebug: window.open ("", "poop", "height = 200, width = 200, modal = yes, alwaysRaised = yes"); ¿¿¿y adivina qué??? ¡¡¡¡¡¡funciona!!!!!!
24
Sí, funciona, pero esto parece ser un truco. Firefox está escrito de tal manera que abrir una nueva ventana vs pestaña es una preferencia del navegador, no una preferencia de JavaScript. Por lo tanto, es factible que su sugerencia no funcione igual en una versión posterior de firefox. Prefiero no confiar en un hack.
adam
2
Y para ser claros, no quiero decir que sea un hack de JavaScript. Agregar el alto y el ancho de la ventana son claramente características del método js window.open ( w3schools.com/HTMLDOM/met_win_open.asp ) Me refiero a piratear en el sentido de manipular el comportamiento previsto de firefox.
adam
2
Realmente no lo llamaría un truco, per se. Solo estás comprometiendo el comportamiento que realmente te gustaría tener e implementando eso.
Matchu
15

Tratar:

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

Tengo un código que hace lo que dices, pero contiene muchos parámetros. Creo que estos son los mínimos, avíseme si no funciona, publicaré el resto

arulmr
fuente
Esto funciona en FF 31 y Chrome 36 usando solo la opción "modal = yes". Todas las opciones especificadas también funcionan. También tengo "Abrir nuevas ventanas en pestañas nuevas" en mis preferencias de FF. Sin opciones abiertas, las ventanas se abren en una nueva pestaña.
Clint Pachl
Después de algunas pruebas más, parece que casi todos los parámetros, siempre que haya al menos uno, abrirán una nueva ventana en lugar de una pestaña. Por ejemplo, solo "top = 0" incluso funciona en FF 31 y Chrome 36. Esto está en OpenBSD usando el administrador de ventanas cwm. Entonces los resultados pueden variar.
Clint Pachl
¿Puedo saber qué es [nombre de la ventana]?
pcs el
10

OK, después de hacer muchas pruebas, aquí mi conclusión:

Cuando realizas:

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

o lo que sea que coloque en el campo de destino, esto no cambiará nada: la nueva página se abrirá en una nueva pestaña (así que dependa de las preferencias del usuario)

Si desea que la página se abra en una nueva ventana "real", debe poner un parámetro adicional. Me gusta:

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

Después de la prueba, parece que el parámetro adicional que utiliza, realmente no importa: este no es el hecho de que haya puesto "este parámetro" o "este otro" que crea la nueva "ventana real", sino el hecho de que hay nuevos parámetros. )

Pero algo está confundido y puede explicar muchas respuestas incorrectas:

Esta:

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

Y esto:

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

NO dará el mismo resultado.

En el primer caso, cuando abra una página sin parámetros adicionales, se abrirá en una nueva pestaña . Y en este caso, la segunda llamada también se abrirá en esta pestaña debido al nombre que le dé.

En el segundo caso, como su primera llamada se realiza con un parámetro adicional, la página se abrirá en una nueva " ventana real ". Y en ese caso, incluso si la segunda llamada se realiza sin el parámetro adicional, también se abrirá en esta nueva " ventana real " ... ¡pero la misma pestaña!

Esto significa que la primera llamada es importante ya que decidió dónde colocar la página.

Peter
fuente
Esta respuesta debería tener muchos ++++
Mitch VanDuyn
9

No deberías necesitarlo. Permita que el usuario tenga las preferencias que desee.

Firefox lo hace de forma predeterminada porque abrir una página en una nueva ventana es molesto y nunca se debe permitir que una página lo haga si eso no es lo que desea el usuario. (Firefox te permite abrir pestañas en una nueva ventana si la configuras de esa manera).

CookieOfFortune
fuente
31
tu estas muy equivocado. y por cierto, diciendo "usted no debe necesidad de" no es apropiado, especialmente si es algo que el jefe quiere
8
Probemos y mantengamos los comentarios prácticos y útiles. Podemos estar en desacuerdo sin ser insultantes.
adam
17
@ theman_on_vista: convencer a tu jefe es tu responsabilidad. Su empresa le ha otorgado la responsabilidad de resolver problemas de diseño. Esto incluye señalar ideas de diseño incorrectas.
EFraim
2
Tan verdadero. La pantalla pertenece al usuario y a nadie más.
Christopher Creutzig
12
Está en el ámbito del diseñador elegir una ventana emergente o pestaña. Si bien soy un usuario que siempre prefiere las pestañas, reconozco que a veces, el diseño realmente requiere una ventana emergente o una pestaña. Debería estar en el ámbito del programador para hacerlo posible. Dejando de lado las diferencias filosóficas, este tipo de comentario es completamente inapropiado para un sitio de referencia de programación. Y en este caso, no es un "¿debería?" pregunta. Es "¿cómo lo hago?"
jbenet
9

Puede intentar la siguiente función:

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

El código HTML para la ejecución:

<a href="#" onclick="open('http://www.google.com')">google search</a>
jgray
fuente
2
¿Cuál es el propósito de la popup.location = URL;? La window.open()llamada debe abrirlo en la URL correcta y, en su ejemplo de código, URLno está definido, por lo que recurrirá al objeto de URL experimental (y no ampliamente compatible) . Si bien usarlo para eso es discutible, tengo curiosidad por saber cuáles son las motivaciones para su uso aquí.
Ken
Respuesta sólida y me enseñó cómo hacer que la ubicación no sea editable. gracias
VirtualProdigy
6

La clave son los parámetros:

Si proporciona Parámetros [Altura = "", Ancho = ""], se abrirá en nuevas ventanas.

Si NO proporciona parámetros, se abrirá en una nueva pestaña.

Probado en Chrome y Firefox

MuniR
fuente
1
newwin = window.open ('test.aspx', '', ''); probado en Chrome: 26
MuniR
5

Curiosamente, descubrí que si pasa una cadena vacía (a diferencia de una cadena nula o una lista de propiedades) para el tercer atributo de window.open, se abriría en una nueva pestaña para Chrome, Firefox e IE. Si estuvo ausente, el comportamiento fue diferente.

Entonces, esta es mi nueva llamada:

 window.open(url, windowName, '');
Tom Lianza
fuente
¿No está intentando el póster original abrir ventanas emergentes en una nueva ventana? Además, en IE 11, el fragmento de código que proporcionó abrirá una nueva ventana o pestaña según las preferencias del navegador del usuario.
4

prueba ese método .....

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
fuente
3

Para mí la solución era tener

"location=0"

en el 3er parámetro. Probado en el último FF / Chrome y una versión anterior de IE11

La llamada al método completo que uso está debajo (como me gusta usar un ancho variable):

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
fuente
2

Acabo de probar esto con IE (11) y Chrome (54.0.2794.1 SyzyASan canario):

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

... y se abrió en una nueva ventana.

Lo que significa que Clint pachl tenía razón cuando dijo que proporcionar cualquier parámetro hará que se abra la nueva ventana.

¡Y aparentemente no tiene que ser un parámetro legítimo!

(YMMV: como dije, solo lo probé en dos lugares ... y la próxima actualización podría invalidar los resultados, de cualquier manera)

ETA: Sin embargo, acabo de notar que, en IE, la ventana no tiene decoraciones.

el sueño
fuente
1

Respondido aquí . Pero publicarlo nuevamente como referencia.

window.open()no se abrirá en una pestaña nueva si no ocurre en el evento de clic real. En el ejemplo dado, la url se abre en un evento de clic real. Esto funcionará siempre que el usuario tenga la configuración adecuada en el navegador.

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

Del mismo modo, si está intentando hacer una llamada ajax dentro de la función de clic y desea abrir una ventana en caso de éxito, asegúrese de que está haciendo la llamada ajax con la async : falseopción establecida.

Venkat Kotra
fuente
1

Creo que no es un problema de propiedades de destino html, pero desactivaste la opción "abrir ventanas nuevas en una pestaña nueva" en la pestaña "pestaña" en el menú "opciones" de Firefox. compruébalo y vuelve a intentarlo.

ingrese la descripción de la imagen aquí

shihab mm
fuente
0

Tenía esta misma pregunta pero encontré una solución relativamente simple.

En JavaScript estaba buscando window.opener !=null;para determinar si la ventana era una ventana emergente. Si está utilizando un código de detección similar para determinar si la ventana en la que se está representando el sitio es una ventana emergente, puede "desactivarla" fácilmente cuando desee abrir una ventana "nueva" utilizando el nuevo JavaScript de Windows.

Simplemente coloque esto en la parte superior de su página para que siempre sea una ventana "nueva" .

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

Lo uso en la página de inicio de sesión de mi sitio para que los usuarios no obtengan un comportamiento emergente si usan una ventana emergente para navegar a mi sitio.

Incluso podría crear una página de redireccionamiento simple que haga esto y luego se mueva a la URL que le proporcionó. Algo como,

JavaScript en la página principal:

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

Y luego, usando un pequeño javascript desde aquí , puede obtener la URL y redirigirla.

JavaScript en la página de redireccionamiento:

 <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
fuente