Chrome, Javascript, window.open en una pestaña nueva
(8)
A veces es útil forzar el uso de una pestaña, si al usuario le gusta eso. Como dijo Prakash anteriormente, esto a veces es dictado por el uso de un evento no iniciado por el usuario, pero hay formas de evitarlo.
Por ejemplo:
$("#theButton").button().click( function(event) {
$.post( url, data )
.always( function( response ) {
window.open( newurl + response, ''_blank'' );
} );
} );
siempre abrirá "newurl" en una nueva ventana del navegador ya que la función "siempre" no se considera iniciada por el usuario. Sin embargo, si hacemos esto:
$("#theButton").button().click( function(event) {
var newtab = window.open( '''', ''_blank'' );
$.post( url, data )
.always( function( response ) {
newtab.location = newurl + response;
} );
} );
abrimos la nueva ventana del navegador o creamos la nueva pestaña, según lo determinado por la preferencia del usuario en el clic del botón que IS inicia el usuario. Luego, simplemente establecemos la ubicación en la URL deseada después de regresar de la publicación de AJAX. Voila, forzamos el uso de una pestaña si al usuario le gusta eso.
En Chrome, se abre en una nueva pestaña:
<button onclick="window.open(''newpage.html'', ''_blank'')" />
esto se abre en una nueva ventana (pero me gustaría que esto se abra en una nueva pestaña también:
<script language="javascript">
window.open(''newpage.html'', ''_blank'');
</script>
¿Es esto factible?
Borrar mini-solución $(''<form action="http://samedomainurl.com/" target="_blank"></form>'').submit()
Esto abrirá el enlace en una nueva pestaña en Chrome y Firefox, y posiblemente más navegadores que no haya probado:
var popup = $window.open("about:blank", "_blank"); // the about:blank is to please Chrome, and _blank to please Firefox
popup.location = ''newpage.html'';
Básicamente, abre una nueva pestaña vacía y luego establece la ubicación de esa pestaña vacía. Tenga en cuenta que se trata de una especie de truco, ya que el comportamiento de la pestaña / ventana del navegador es realmente el dominio, la responsabilidad y la elección del navegador y del usuario.
La segunda línea se puede llamar en una devolución de llamada (después de haber hecho alguna solicitud de AJAX, por ejemplo), pero luego el navegador no la reconocerá como un evento de clic iniciado por el usuario y puede bloquear la ventana emergente.
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 abrir en una nueva pestaña, si el usuario configuró el navegador para hacerlo.
EDITAR:
Una explicación más detallada:
1. En los navegadores modernos, se abrirá window.open en una nueva pestaña en lugar de una ventana emergente.
2. Puede forzar a un navegador a usar una nueva ventana (''popup'') especificando opciones en el 3er parámetro
3. Si la llamada window.open no era parte de un evento iniciado por el usuario, se abrirá en una nueva ventana.
4. Un "evento iniciado por el usuario" no tiene la misma llamada a la función, pero debe originarse en la función invocada por un usuario.
5. Si un evento iniciado por el usuario delega o aplaza una llamada a función (en un evento oyente o delegado no vinculado al evento click, o al usar setTimeout por ejemplo), pierde su estado como "iniciado por el usuario"
6. Algunos bloqueadores de ventanas emergentes permitirán ventanas abiertas desde eventos iniciados por el usuario, pero no aquellos abiertos de otra manera.
7. Si alguna ventana emergente está bloqueada, las que normalmente permite un bloqueador (a través de eventos iniciados por el usuario) a veces también serán bloqueadas. Algunos ejemplos…
Obligar a que se abra una ventana en una nueva instancia del navegador, en lugar de una nueva pestaña:
window.open(''page.php'', '''', ''width=1000'');
Lo siguiente podría calificar como un evento iniciado por el usuario, aunque llame a otra función:
function o(){
window.open(''page.php'');
}
$(''button'').addEvent(''click'', o);
Lo siguiente no calificaría como un evento iniciado por el usuario, ya que el setTimeout lo aplaza:
function g(){
setTimeout(o, 1);
}
function o(){
window.open(''page.php'');
}
$(''button'').addEvent(''click'', g);
Por el momento (Chrome 39) utilizo este código para abrir una nueva pestaña:
window.open(''http://www..com'', ''_blank'', ''toolbar=yes, location=yes, status=yes, menubar=yes, scrollbars=yes'');
Por supuesto, esto puede cambiar en futuras versiones de Chrome.
Es una mala idea usar esto si no puede controlar el navegador que están usando sus usuarios. Es posible que no funcione en versiones futuras o con configuraciones diferentes.
Puede usar este código para abrir en una nueva pestaña.
function openWindow( url )
{
window.open(url, ''_blank'');
window.focus();
}
Lo obtuve de ...
si usa window.open(url, ''_blank'')
, se bloqueará (bloqueador de ventanas emergentes) en Chrome, Firefox, etc.
prueba esto,
$(''#myButton'').click(function () {
var redirectWindow = window.open(''http://google.com'', ''_blank'');
redirectWindow.location;
});
trabajando js violín para esto http://jsfiddle.net/safeeronline/70kdacL4/2/
trabajo js violín para ajax ventana abierta http://jsfiddle.net/safeeronline/70kdacL4/1/
La mejor manera que uso:
1- añadir enlace a su html:
<a id="linkDynamic" target="_blank" href="#"></a>
2- agregar la función JS:
function OpenNewTab(href)
{
document.getElementById(''linkDynamic'').href = href;
document.getElementById(''linkDynamic'').click();
}
3- solo llame a la función OpenNewTab con el enlace que desee