Abrir nuevas páginas en pestañas mediante programación

98

Estoy tratando de "forzar" a Safari o IE7 a abrir una nueva página usando una nueva pestaña .

Programáticamente me refiero a algo como:

window.open('page.html','newtaborsomething');
Ricardo Vega
fuente
1
No estoy seguro de entender el punto: ¿estás desarrollando una aplicación que funcione con IE y quieres abrir cada página nueva en una pestaña nueva? ¿O simplemente desea configurar el IE para abrir una nueva pestaña cuando se hace clic en un enlace? ¿O está creando un sitio con más enlaces y desea que se abran por separado? Por favor, déjelo más claro.
Dungeo
Gracias por todos sus comentarios y respuestas, sé que esto no es un gran problema y no debería ser un problema en mi desarrollo, pero esta es una solicitud de cliente, no una importante que solo quería saber. El problema es que IE7 y Safari no abren una ventana emergente con una pestaña usando javascript o el atributo de destino, ¿verdad?
Ricardo Vega

Respuestas:

63

No puede controlar esto directamente, porque es una opción controlada por los usuarios de Internet Explorer.

Abrir páginas usando Window.open con un nombre de ventana diferente se abrirá en una nueva ventana del navegador como una ventana emergente, O se abrirá en una nueva pestaña, si el usuario configuró el navegador para hacerlo.

entoncesonhacker
fuente
Cuando se selecciona la opción "Dejar que Internet Explorer decida cómo se abren las ventanas emergentes", ¿qué criterios utiliza Internet Explorer para tomar esta decisión?
Dead.Rabit
113

Puede, en Firefox funciona, agregar el atributo target = "_ newtab" al ancla para forzar la apertura de una nueva pestaña.

<a href="some url" target="_newtab">content of the anchor</a>

En javascript puedes usar

window.open('page.html','_newtab');

Dicho eso, estoy parcialmente de acuerdo con Sam. No debe obligar al usuario a abrir nuevas páginas o una nueva pestaña sin mostrarles una pista de lo que sucederá antes de que hagan clic en el enlace.

Avíseme si también funciona en otro navegador (no tengo la oportunidad de probarlo en otro navegador que no sea Firefox en este momento).

Editar: referencia agregada para ie7 Tal vez este enlace pueda ser útil
http://social.msdn.microsoft.com/forums/en-US/ieextensiondevelopment/thread/951b04e4-db0d-4789-ac51-82599dc60405/

Eineki
fuente
6
Gracias por este consejo de Firefox, ahora he actualizado mi complemento TargetKiller para eliminar "_newtab" y "newtab". : P
thenonhacker
1
Realmente aprecio tu respuesta, pero sé que Firefox lo hará (algunos textos, no probados por mí, comentan que esto no siempre es cierto, hay una probabilidad del 50-50 de obtener una nueva ventana o pestaña). También creo que esto no debería ser un problema, pero ya conocen clientes :)
Ricardo Vega
2
Puede que este no sea el caso en todas las compilaciones / plataformas, pero Firefox 3.5 en Linux no te permite hacer esto más de una vez ... si tienes varios enlaces target = "_ newtab" en tu página, haz clic en cualquiera de ellos solo llenará una sola pestaña nueva ... es decir, los clics posteriores sobrescribirán cualquier cosa abierta anteriormente en esa pestaña. Me hace pensar que en realidad se está abriendo una pestaña llamada "_newtab", en lugar de ser una solución alternativa específica del navegador.
Rylee Corradini
55
Estoy bastante seguro de que "_newtab" no tiene sentido, a menos que alguien tenga documentación que indique lo contrario. Todo lo que está haciendo es abrir una ventana cuyo nombre es _newtab (razón por la cual todos los enlaces posteriores con ese objetivo se abren en la misma ventana). Puede apuntar a "foo" o "bar" y ver el mismo comportamiento. Los únicos objetivos conocidos son _blank, _self, _parent y _top. htmlcodetutorial.com/linking/_A_TARGET.html
Tom Lianza
43

Aquellos de ustedes que intentan utilizar lo siguiente:

window.open('page.html', '_newtab');

realmente debería mirar el método window.open.

Todo lo que está haciendo es decirle al navegador que abra una nueva ventana NOMBRADA "_newtab" y cargue page.html en ella. Cada nueva página que cargue se cargará en esa ventana. Sin embargo, si un usuario tiene su navegador configurado para abrir nuevas páginas en nuevas pestañas en lugar de nuevas ventanas, se abrirá una pestaña. Independientemente, está usando el mismo nombre para la ventana o pestaña.

Si desea que se abran diferentes páginas en diferentes ventanas o pestañas, tendrá que cambiar el NOMBRE de la nueva ventana / pestaña a algo diferente, como:

window.open('page2.html', '_newtab2');

Por supuesto, el nombre de la nueva ventana / pestaña podría ser cualquier nombre como page1, page2, page3, etc. en lugar de _newtab2.

Bob Lindabury
fuente
3
sabe lo que hace. '_newtab' no es un nombre reservado. '_blank' es algo especial que abre otra ventana / pestaña no especificada y sin nombre, esta que puede seguir usando una y otra vez. '_newtab' no es especial, excepto que es el nombre específico que le dio a una nueva pestaña (predeterminada) o ventana, que su navegador sigue actualizando con cualquier URL que le envíe.
BradChesney79
14

Depende del usuario si quiere usar nuevas pestañas o nuevas ventanas, no es asunto del desarrollador modificar este comportamiento. No creo que puedas hacerlo.

Lo que más me molesta es que los sitios me obliguen a abrir en una nueva ventana / pestaña; soy bastante capaz de tomar esa decisión por mí mismo. Particularmente cuando lo hacen en javascript, eso es realmente inútil.

Sam Meldrum
fuente
1
+1 a Sam: las nuevas páginas que se abren en pestañas o ventanas es una elección específica del navegador (y del usuario). En general, odio cuando cualquier sitio abre una nueva ventana.
Richard Ev
Además de esto: en la definición "estricta", no hay un atributo válido "objetivo" porque no molesta al usuario. Pruébelo: validator.w3.org
guerda
4
Me gusta abrir lotes de pestañas en casa, así que soy el usuario en ese caso. Solo un recordatorio de que hay excepciones.
Mark Essel
7
Si bien estoy de acuerdo en que puede ser molesto cuando los sitios fuerzan acciones, creo que es un poco inútil decir simplemente que no debes hacer algo sin considerar las razones por las que alguien podría querer hacerlo. Es común que los sitios abran cosas en nuevas pestañas, particularmente enlaces de sitios externos o cuando no es útil tener una página activa reemplazada por contenido nuevo, por lo que no es un comportamiento completamente inesperado. También sugiero que esto no es realmente una respuesta a la pregunta y hubiera sido más adecuado como comentario para la publicación original.
Andyface
1
No estoy de acuerdo, asumiendo que un valor predeterminado para el usuario es una elección de diseño por aplicación web, no por navegador. El navegador puede suscribirse a un valor predeterminado donde la aplicación no lo hace. Además, si los navegadores proporcionan al usuario una forma de anular los valores predeterminados de la aplicación / los valores predeterminados del navegador, entonces es lo mejor de ambos mundos. Usuario> Aplicación> Navegador.
Derek Litz
8

Ya has probado como

var open_link = window.open('','_blank');
open_link.location="somepage.html";
Thurein Soe
fuente
¿Este navegador cruzado es compatible? Parece funcionar en IE8, preocupado por futuras versiones u otros navegadores.
n00b
Sí ... es compatible con varios navegadores. No tuve ningún problema con eso hasta ahora: D
Thurein Soe
5

Me enteré en Chrome

window.open('page.html','_newtab')

solo funcionará una vez.

Puedes usar:

window.open(ct.getNewHref(),'_newtab' + Math.floor(Math.random()*999999));

Para abrir varias pestañas nuevas.

Derek 朕 會 功夫
fuente
10
eso se debe a que en Chrome, _newtab es solo un nombre y le solicita que abra la página en la pestaña llamada "_newtab"
w00t
3

El código que uso con jQuery:

$("a.btn_external").click(function() {
    url_to_open = $(this).attr("href");
    window.open(url_to_open, '_blank');
    return false;
});

Esto es útil para distinguir entre los eventos de clic de un padre en un hijo. Al utilizar este método, no activa el evento de clic del padre.

lacroixca
fuente
8
¿Por qué no usar simplemente HTML antiguo? <a href="page.html" target="_blank">foo</a>
pixelastic
1
@pixelastic "Al utilizar este método, no activa el evento de clic del padre".
Michael Blackburn
3

Esto funciona al 100%

window.open('http://www.google.com/','_newtab' + Date.now());

Kevin Muchwat
fuente
0

Si quisiera, podría usar este método, que es un poco hack, pero ofrecería la funcionalidad deseada:

jQuery('<a/>', {
    id: 'foo',
    href: 'http://google.com',
    title: 'Become a Googler',
    rel: 'external',
    text: 'Go to Google!',
    target:'_blank',
    style:'display:none;'
}).appendTo('#mySelector');

$('#foo').click()
Xenología
fuente
¿puede proporcionar un jsfiddle?
Xenología
-2

Esto puede funcionar si puede llamar a un archivo por lotes (yo uso php con XP sp2 e IE8 ... puede probar IE7, no sé). Utilice lo siguiente (o similar) en su archivo .bat para abrir Windows: Inicie "" C: \ Progra ~ 1 \ Intern ~ 1 \ iexplore "http://www.site.com". No hay espacio entre las comillas y C: \ Progr ... etc. En algún momento, esto puede comenzar a abrir nuevas ventanas (es decir, target = "_ blank") en lugar de nuevas pestañas, pero funciona hasta cierto punto; no ampliamente probado. Para usar esto en un archivo por lotes normal (CMD.exe), probablemente necesite tener una ventana abierta. Simplemente compartiendo algo con lo que me topé. EDITADO para aclaraciones.

river_mouse
fuente
-7
<a href="http://www.google.com/" target="_self">New Tab Example</a>

Funciona en IE7.

Saludos,

Glenn

Glenn Moore
fuente
8
Glenn, esto es lo contrario de lo que pidió el OP. _self abrirá el documento en la misma ventana o marco.
travega
Además, no es la forma de abrir de forma programática. La sorpresa es cómo gana +10 rep (+ 3 / -10) con esta respuesta.
Vusan