2010-12-28 23 views
11

Estoy tratando de arreglar un sitio web.html abrir una url en el nuevo objetivo y foco

Se abre una página de ayuda en una nueva ventana/pestaña través <a href="..." target="help"> (ningún otro cuadro tiene este nombre)

Esto funciona bien la primera vez que se abre una nueva ventana/pestaña, por la ayuda. Pero en clics posteriores, la ventana/pestaña se carga pero permanece oculta.

yo probamos este:

<script> 
    function OpenAndFocusHelp() { 
     win=window.open('help/1000CH00017.htm','help'); 
     win.focus(); 
    }  
</script> 

<a href="help.html" target="help" 
    onclick="OpenAndFocusHelp()">Help</a> 

No funcionó!

+0

Entonces, la ventana se está cargando, solo que no se muestra? ¿Está cargando la página correcta? ¿Tiene el mismo comportamiento en todos los navegadores? Creo que esta es una preocupación del administrador de ventanas, no es algo que se pueda hacer desde javascript, pero estoy protagonizando por ahora, quiero seguirlo. – jcolebrand

Respuesta

3

Creo que esta función es específica del navegador y no se puede definir el comportamiento para enfocar nuevas pestañas o ventanas ..

2

Puede tener tal código en su lugar:

var _arrAllWindows = new Array(); 
function OpenOrFocus(oLink, sTarget) { 
    var oWindow = _arrAllWindows[sTarget]; 
    if (!oWindow || oWindow.closed) { 
     oWindow = window.open(oLink.href, sTarget); 
     _arrAllWindows[sTarget] = oWindow; 
    } 
    oWindow.focus(); 
    return false; 
} 

Entonces llamarlo , tienen tal relación:

<a href="http://www.google.com" onclick="return OpenOrFocus(this, 'help');">Open</a> 

funciona bien en Chrome e IE, Firefox, lamentablemente desactivar de forma predeterminada la opción de "subir" ventanas de código para focus() no tiene ningún efecto en ese navegador - no pudo encontrar ningún trabajo.

caso de prueba está disponible aquí: http://jsfiddle.net/yahavbr/eVxJX/

+0

@richard: ¿qué navegador? ¿sucede en la muestra jsfiddle también? –

+0

El ejemplo en http://jsfiddle.net/yahavbr/eVxJX/ funciona para chome no firefox como se mencionó anteriormente. Volverá a hacer la prueba con, por ejemplo, cuando regrese al trabajo. –

+0

Probado con ie6 y no funciona, con él. –

7

Parece que los navegadores modernos no le permiten a window.focus una ventana existente. O al menos, no le dará ese enfoque a la ventana. (IE9 parpadeará, pero la mayoría de los navegadores simplemente lo cargan, pero no dan ninguna indicación de que la atención del usuario deba dirigirse a la nueva ventana.)

Por lo tanto, una solución que se presenta es cerrar primero la ventana, y luego reabrirlo inmediatamente después. Por ejemplo, declare the following function:

window.openOrFocus = function(url, name) { 
    if (!window.popups) 
     window.popups = {}; 
    if (window.popups[name]) 
     window.popups[name].close(); 
    window.popups[name] = window.open(url, name); 
} 

Ahora, se puede escribir HTML como este:

<a href="javascript:void(0);" onclick="openOrFocus('http://jsfiddle.net/k3t6x/2/', 'window1')">Window 1</a><br /> 
<a href="javascript:void(0);" onclick="openOrFocus('http://jsfiddle.net/KR6w3/1/', 'window2')">Window 2</a><br /> 

Desde que se cierre la ventana en primer lugar, se da de forma fiable el foco a la ventana secundaria de nueva creación.

Esta solución también utiliza el espacio de nombres window.popups, por lo que cambiar el nombre de los usos de que en la muestra javascript si tiene una función llamada popups o ha chocado con él de otro modo.

Advertencia: Esto no funciona después de una devolución posterior. Esto se debe a que una vez que navegas fuera de la página actual, ya no es el propietario de las ventanas secundarias. Por lo tanto, ya no puede cerrarlos. Sin embargo, simplemente se degrada al comportamiento habitual (sin enfoque) de usar el atributo target.

Probado en: Firefox 4, Chrome 11, IE 9
jsFiddle Demostración:http://jsfiddle.net/aqxBy/7/

1

Ésta es una forma usando jQuery y HTML5 con reserva para los clientes JavaScript discapacitados. Volverá a cargar páginas en cada clic. Probado y funciona en Firefox y Chrome.

<script> 
    $(document).ready(function() { 
     $('a[data-popup]').click(function(event) { 
      event.preventDefault(); 
      window.open(this.href, this.dataset['popup'], 'resizable,scrollbars').focus(); 
     }); 
    }); 
</script> 

<a href="https://stackoverflow.com/" target="_blank" data-popup="stackoverflow">Stack Overflow</a> 
<a href="https://superuser.com/" target="_blank" data-popup="superuser">Super User</a> 
<a href="https://serverfault.com/" target="_blank" data-popup="serverfault">Server Fault</a> 
Cuestiones relacionadas