2012-06-11 14 views
22

Tengo un enlace que debería abrirse en una nueva pestaña, pero si la pestaña ya está abierta, simplemente cambie a ella. He intentado con javascript, wnd = window.open() y que wnd.focus(), que funciona en Chrome 19, pero no en FF 13 o IE 9. Aquí está el código que he escrito:Abrir enlace en una nueva ventana o enfocar si ya está abierto

<script type="text/javascript"> 
var loadingTableWnd; 
function openOrSwitchToWindow(url){ 
if(loadingTableWnd == undefined) 
loadingTableWnd = window.open(url,'myFrame'); 
else 
loadingTableWnd.focus(); 
} 
</script> 
<a href='javascript:openOrSwitchToWindow("/");' >Loading Table</a> 

¿Alguna idea de cómo puedo abrir o cambiar desde cada navegador?

EDIT: Necesito abrir el enlace en una nueva pestaña, no en una ventana independiente.

+0

Hay un error que se ha presentado desde hace tiempo ago, aún no ha sido arreglado - https://bugzilla.mozilla.org/show_bug.cgi?id=416771 –

+0

Ese error fue enviado en 2008. Aquí está en 2016 con Firefox 47 y todavía no se ha resuelto. ¿Puede alguien (con un poco de atracción) escalar? –

Respuesta

28

diferentes navegadores se comportan de forma diferente para window.open() y enfoque(). Para que este código window.open('www.sample.com','mywindow').focus()

  • Chrome 20 abre una nueva pestaña, y se centra en la posterior abierta() llama sin tener en cuenta si el foco() se llama o no.
  • Firefox 13 abre una nueva pestaña, se enfoca en abrir primero(), no se enfoca en las llamadas open() posteriores/ignora el foco().
  • IE 8 abre una nueva ventana, honours focus().
  • Safari 5 abre una nueva ventana y se enfoca en las llamadas open() posteriores independientemente de si se llama o no al foco().

violín para probar con: http://jsfiddle.net/jaraics/pEG3j/

+1

Si es posible, por favor, actualice su respuesta para iOS 9.3.2 - iPhone6 ​​(no importa Chrome o Safari): abre una nueva pestaña, se centra en la primera abierta (), no se enfoca en las llamadas open() posteriores/ignora el foco(). –

1

window.focus() es ampliamente compatible - http://www.w3schools.com/jsref/met_win_focus.asp y parece estar funcionando bien en Internet Explorer y Firefox para mí, el problema debería estar en su código. He creado un jsFiddle simple para que lo pruebes: http://jsfiddle.net/Pharaon/uJy5t/

+0

Gracias por el jsfiddle, pero no puedo hacerlo funcionar con pestañas (ver mi edición). También necesito abrir una página en el dominio actual. (Por cierto, tu violín fue eliminado por alguna razón) – jaraics

8

No deberías necesitar ninguna lógica para algo como esto. Por defecto, al especificar el segundo parámetro para window.open(), la ventana tiene un "nombre" que el navegador recuerda. Si intenta llamar al window.open() con el mismo nombre (después de que ya se haya abierto), no abre una nueva ventana ... pero es posible que deba llamar al .focus(). Prueba esto:

var a = window.open(url, "name"); 
a.focus(); 

Estos deberían ser las únicas líneas de código en su función, y que no es necesario la variable loadingTableWnd ...

+1

Dar un nombre de hecho impide abrir una nueva ventana. Pero mi problema es que el usuario puede navegar (algunas funciones se controlan con hash (#) en la url) y no deseo restablecerlo.Necesito la variable, porque debo acceder a la ventana de los clics posteriores en el enlace. De ahí la necesidad de una variable global. No – jaraics

+0

@Ian cierto con la última versión del sistema operativo Windows, como Windows Server 2012 R2 – Gandhi

1

Si la ventana ya está abierta y si usted quiere centrarse en que la ventana se puede utilizar

window.open('', 'NameOfTheOpenedWindow').focus(); 
Cuestiones relacionadas