Estoy tratando de abrir una URL en una nueva pestaña, en lugar de una ventana emergente.
He visto preguntas relacionadas donde las respuestas se verían así:
window.open(url,'_blank');
window.open(url);
Pero ninguno de ellos funcionó para mí, el navegador todavía intentó abrir una ventana emergente.
javascript
marca
fuente
fuente
Respuestas:
Nada que pueda hacer un autor puede elegir abrir en una nueva pestaña en lugar de una nueva ventana; Es una preferencia del usuario . (Tenga en cuenta que la preferencia de usuario predeterminada en la mayoría de los navegadores es para pestañas nuevas, por lo que una prueba trivial en un navegador donde esa preferencia no ha cambiado no demostrará esto).
CSS3 propuso target-new , pero la especificación fue abandonada .
Lo contrario no es cierto; al especificar dimensiones para la ventana en el tercer argumento de
window.open()
, puede activar una nueva ventana cuando la preferencia es para pestañas.fuente
window.open
le dice al navegador que abra algo nuevo, luego el navegador abre lo que se elige en su configuración: pestaña o ventana. En los navegadores con los que probó, cambie la configuración para que se abra en una nueva ventana en lugar de una pestaña y verá que las soluciones de los demás son incorrectas.Este es un truco
En la mayoría de los casos, esto debería suceder directamente en el
onclick
controlador del enlace para evitar bloqueadores de ventanas emergentes y el comportamiento predeterminado de "nueva ventana". Puede hacerlo de esta manera, o agregando un detector de eventos a suDOM
objeto.http://www.tutsplanet.com/open-url-new-tab-using-javascript/
fuente
window.open()
no se abrirá en una nueva pestaña si no está sucediendo en el evento de clic real. En el ejemplo dado, la URL se abre en el evento de clic real. Esto funcionará siempre que el usuario tenga la configuración adecuada en el navegador .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 : false
opción establecida.fuente
async: false
No funciona en Chrome. Para abrir una nueva ventana desde la devolución de llamada, primero debe abrir una ventana vacía antes de enviar la solicitud HTTP y luego actualizarla. Aquí hay un buen truco .window.open
No se pueden abrir ventanas emergentes de manera confiable en una pestaña nueva en todos los navegadoresLos diferentes navegadores implementan el comportamiento de
window.open
diferentes maneras, especialmente con respecto a las preferencias del navegador de un usuario. No puede esperar que el mismo comportamientowindow.open
sea verdadero en todo Internet Explorer, Firefox y Chrome, debido a las diferentes formas en que manejan las preferencias del navegador de un usuario.Por ejemplo, los usuarios de Internet Explorer (11) pueden elegir abrir ventanas emergentes en una nueva ventana o una nueva pestaña, no se puede obligar a los usuarios de Internet Explorer 11 a abrir ventanas emergentes de una determinada manera
window.open
, como se alude en la respuesta de Quentin .En cuanto a los usuarios de Firefox (29), el uso
window.open(url, '_blank')
depende de las preferencias de pestañas de su navegador, aunque aún puede obligarlos a abrir ventanas emergentes en una nueva ventana especificando un ancho y una altura (consulte la sección "¿Qué pasa con Chrome?" A continuación).Demostración
Vaya a la configuración de su navegador y configúrelo para abrir ventanas emergentes en una nueva ventana.
Internet Explorer (11)
Página de prueba
Después de configurar Internet Explorer (11) para abrir ventanas emergentes en una nueva ventana como se demostró anteriormente, use la siguiente página de prueba para probar
window.open
:Observe que las ventanas emergentes se abren en una nueva ventana, no en una nueva pestaña.
También puede probar esos fragmentos anteriores en Firefox (29) con su preferencia de pestaña establecida en nuevas ventanas y ver los mismos resultados.
¿Qué hay de Chrome? Se implementa de manera
window.open
diferente a Internet Explorer (11) y Firefox (29).No estoy 100% seguro, pero parece que Chrome (versión
34.0.1847.131 m
) no parece tener ninguna configuración que el usuario pueda usar para elegir abrir o no las ventanas emergentes en una nueva ventana o una nueva pestaña (como Firefox e Internet Explorer) tener). Revisé la documentación de Chrome para administrar ventanas emergentes , pero no mencionó nada sobre ese tipo de cosas.Además, una vez más, diferentes navegadores parecen implementar el comportamiento de manera
window.open
diferente. En Chrome y Firefox, especificar un ancho y alto forzará una ventana emergente, incluso cuando un usuario haya configurado Firefox (29) para abrir nuevas ventanas en una nueva pestaña (como se menciona en las respuestas a JavaScript abierto en una nueva ventana, no en una pestaña ) :Sin embargo, el mismo fragmento de código anterior siempre abrirá una nueva pestaña en Internet Explorer 11 si los usuarios configuran pestañas como preferencias de su navegador, ni siquiera especificando un ancho y una altura forzará una nueva ventana emergente para ellos.
Por lo tanto, el comportamiento de
window.open
en Chrome parece ser abrir ventanas emergentes en una nueva pestaña cuando se usa en unonclick
evento, abrirlas en ventanas nuevas cuando se usan desde la consola del navegador ( como lo han señalado otras personas ) y abrirlas en ventanas nuevas cuando especificado con un ancho y una altura.Resumen
Los diferentes navegadores implementan el comportamiento de manera
window.open
diferente con respecto a las preferencias del navegador de los usuarios. No puede esperar que el mismo comportamientowindow.open
sea verdadero en todo Internet Explorer, Firefox y Chrome, debido a las diferentes formas en que manejan las preferencias del navegador de un usuario.Lectura adicional
window.open
la documentación .fuente
Un trazador de líneas:
Crea un
a
elemento virtual , lo proporcionatarget="_blank"
para que se abra en una nueva pestaña, lo asigna correctamenteurl
href
y luego hace clic en él.Y si quieres, en base a eso puedes crear alguna función:
y luego puedes usarlo como:
Nota IMPORTANTE:
openInNewTab
(así como cualquier otra solución en esta página) debe llamarse durante la devolución de llamada de acción del usuario, por ejemplo. evento de clic interno (no es necesario en la función de devolución de llamada directamente, pero durante la acción de clic).Si lo llama manualmente en algún momento aleatorio (por ejemplo, dentro de un intervalo o después de la respuesta del servidor), puede ser bloqueado por el navegador (lo que tiene sentido ya que sería un riesgo de seguridad y podría conducir a una experiencia de usuario muy pobre) )
fuente
$('<a />',{'href': url, 'target', '_blank'}).get(0).click();
Object.assign(document.createElement('a'), { target: '_blank', href: 'URL_HERE'}).click();
Si lo usa
window.open(url, '_blank')
, se bloqueará (bloqueador de ventanas emergentes) en Chrome.Prueba esto:
Con JavaScript puro,
fuente
the request was made in a sandboxed frame whose 'allow-popups' permission is not set
Para elaborar la respuesta de Steven Spielberg, hice esto en tal caso:
De esta manera, justo antes de que el navegador siga el enlace, estoy configurando el atributo de destino, por lo que hará que el enlace se abra en una nueva pestaña o ventana ( depende de la configuración del usuario ).
Un ejemplo de línea en jQuery:
Esto también se puede lograr simplemente utilizando las API DOM del navegador nativo:
fuente
¡Utilizo lo siguiente y funciona muy bien!
fuente
Creo que no puedes controlar esto. Si el usuario ha configurado su navegador para abrir enlaces en una nueva ventana, no puede forzar esto para abrir enlaces en una nueva pestaña.
JavaScript abierto en una nueva ventana, no pestaña
fuente
Un hecho interesante es que la nueva pestaña no se puede abrir si el usuario no invoca la acción (haciendo clic en un botón o algo) o si es asíncrona, por ejemplo, esto NO se abrirá en una nueva pestaña:
Pero esto puede abrirse en una nueva pestaña, dependiendo de la configuración del navegador:
fuente
<script>open('http://google.com')</script>
en un.html
archivo y ábralo en una nueva instalación de una versión reciente de Firefox; observará que Firefox felizmente abre Google en una nueva pestaña (tal vez después de que le diga que permita ventanas emergentes), no una nueva ventana.Simplemente omitiendo los parámetros [strWindowFeatures] se abrirá una nueva pestaña, A MENOS QUE la configuración del navegador anule (la configuración del navegador prevalece sobre JavaScript).
Nueva ventana
Nueva pestaña
- o -
fuente
fuente
Puedes usar un truco con
form
:jsFiddle demo
fuente
name
como clave yvalue
como valor para todos los parámetros dentro de los parámetros de consulta. Y luego envíe el formularioa
etiqueta en lugar de un formulario, y utilizando el.click()
método jQuery para "enviarlo". compruebe mi respuestaEsto no tiene nada que ver con la configuración del navegador si está intentando abrir una nueva pestaña desde una función personalizada.
En esta página, abra una consola de JavaScript y escriba:
E intentará abrir una ventana emergente independientemente de su configuración, porque el 'clic' proviene de una acción personalizada.
Para comportarse como un "clic del mouse" real en un enlace, debe seguir el consejo de @ spirinvladimir y realmente crearlo:
Aquí hay un ejemplo completo (no lo intente en jsFiddle o editores en línea similares, ya que no le permitirá redirigir a páginas externas desde allí):
fuente
w = window.open("placeholder"); $.ajax(...ajax call that returns the url...) success (...w.location = data.url...)
según theandystratton.com/2012/…fuente
JQuery
JS
fuente
O simplemente puede crear un elemento de enlace y hacer clic en él ...
Esto no debería ser bloqueado por ningún bloqueador de ventanas emergentes ... Con suerte.
fuente
Hay una respuesta a esta pregunta y no es no.
Paso 1: crea un enlace invisible:
<a id="yourId" href="yourlink.html" target="_blank" style="display: none;"></a>
Paso 2: haga clic en ese enlace mediante programación:
document.getElementById("yourId").click();
¡Aqui tienes! Funciona un encanto para mí.
fuente
Investigué mucha información sobre cómo abrir una nueva pestaña y permanecer en la misma pestaña. He encontrado un pequeño truco para hacerlo. Supongamos que tiene una url que necesita abrir: newUrl y url anterior: currentUrl , en la que debe permanecer después de abrir una nueva pestaña. El código JS se verá como el siguiente:
fuente
¿Qué hay de la creación de un
<a>
con_blank
comotarget
valor del atributo y laurl
tanhref
, con la exhibición de estilo: oculto, con aa elemento de los niños? Luego agregue al DOM y luego active el evento click en un elemento secundario.ACTUALIZAR
Eso no funciona El navegador evita el comportamiento predeterminado. Podría activarse mediante programación, pero no sigue el comportamiento predeterminado.
Verifique y vea por usted mismo: http://jsfiddle.net/4S4ET/
fuente
Abrir una nueva pestaña desde una extensión de Firefox (Mozilla) es así:
fuente
De esta manera es similar a la solución anterior pero implementada de manera diferente
.social_icon -> alguna clase con CSS
fuente
Esto podría ser un truco, pero en Firefox si especifica un tercer parámetro, 'pantalla completa = sí', se abre una nueva ventana nueva.
Por ejemplo,
Parece anular la configuración del navegador.
fuente
esto funciona para mí, solo prevenga el evento, agregue la url a y
<a>
tag
luego active el evento de clic en esotag
.fuente
Se
window.open(url)
abrirá la URL en la nueva pestaña del navegador. Abajo JS alternativa a ellaAquí hay un ejemplo de trabajo (los fragmentos de stackoverflow no permiten abrir una nueva pestaña)
fuente
Si se abre la URL en una nueva pestaña o en una nueva ventana, en realidad está controlado por las preferencias del navegador del usuario. No hay forma de anularlo en JavaScript.
window.open()
se comporta de manera diferente dependiendo de cómo se use. Si se llama como resultado directo de una acción del usuario , digamos que haga clic en un botón, debería funcionar bien y abrir una nueva pestaña (o ventana):Sin embargo, si intenta abrir una nueva pestaña desde una devolución de llamada de solicitud AJAX , el navegador la bloqueará, ya que fue una acción directa del usuario.
Para omitir el bloqueador de ventanas emergentes y abrir una nueva pestaña desde una devolución de llamada, aquí hay un pequeño truco :
fuente
Lo intenté de esta manera y parece funcionar bien
He encontrado muchos ejemplos de trabajo aquí:
http://www.gtalbot.org/FirefoxSection/Popup/PopupAndFirefox.html#TestPopupControl
fuente
Voy a estar un poco de acuerdo con la persona que escribió (parafraseado aquí): "Para un enlace en una página web existente, el navegador siempre abrirá el enlace en una pestaña nueva si la nueva página forma parte del mismo sitio web que la página web existente ". Para mí, al menos, esta "regla general" funciona en Chrome, Firefox, Opera, IE, Safari, SeaMonkey y Konqueror.
De todos modos, hay una forma menos complicada de aprovechar lo que la otra persona presentó. Suponiendo que estamos hablando de su propio sitio web ("thissite.com" a continuación), donde desea controlar lo que hace el navegador, luego, a continuación, desea que "specialpage.htm" esté VACÍO, sin HTML en absoluto ( ahorra tiempo enviando datos desde el servidor!).
fuente
Si solo desea abrir los enlaces externos (enlaces que van a otros sitios), entonces este bit de JavaScript / jQuery funciona bien:
fuente
El navegador siempre abrirá el enlace en una nueva pestaña si el enlace está en el mismo dominio (en el mismo sitio web). Si el enlace está en algún otro dominio, lo abrirá en una nueva pestaña / ventana, dependiendo de la configuración del navegador.
Entonces, de acuerdo con esto, podemos usar:
Y agregue un código jQuery:
Entonces, primero abra una nueva ventana en el mismo sitio web con _blank target (lo abrirá en una nueva pestaña), y luego abra el sitio web deseado dentro de esa nueva ventana.
fuente