2010-06-03 58 views
12

Tengo dos páginas uno.html y dos.htmlajustar el foco de una ventana emergente cada vez que

estoy abriendo una nueva ventana utilizando siguiente código

//here popup is a global variable 
popup=window.open('two.html','two'); 

por primera vez una ventana emergente abrir con éxito y obtener el foco pero si trato de abrirlo de nuevo sin cerrar la ventana emergente ya abierta, entonces two.html no se enfoca por segunda vez.

nota: he puesto el nombre de ventana emergente como 'dos'

+0

No estoy seguro de que esto se pueda hacer. ¿Qué hay de abrir una nueva ventana? –

+1

solo quiero abrir una nueva ventana una sola vez, no todas las veces – hunt

+1

acepta las ans si funciona para usted –

Respuesta

9

puede achive utilizando focus función que se utiliza por debajo

<script language="javascript" type="text/javascript"> 
<!-- 
function popitup(url) { 
    newwindow=window.open(url,'name','height=200,width=150'); 
    if (window.focus) {newwindow.focus()} 

     if (!newwindow.closed) {newwindow.focus()} 
    return false; 
} 

// --> 
</script> 
+0

muy por encima del código solo funciona en IE pero ahora en firefox 3.6 – hunt

+0

@hunt: ni Google Chrome. Enfocar la ventana de esta manera no es compatible con navegador cruzado. –

+1

Bueno, es "compatible" porque no le hará daño intentarlo, pero Firefox, Chrome y Safari no obedecerán la solicitud. Firefox puede ser configurado por su usuario para permitir que las solicitudes 'focus()' funcionen, pero creo que Chrome y Safari siempre lo ignoran. No hay forma de obligar a esos navegadores a prestar atención. (De hecho Safari es * realmente * serio al respecto: http://whatsthepointy.blogspot.com) – Pointy

1

Puede cerrar la ventana emergente antes de abrirlo si marca a mira si la ventana emergente ya está abierta cuando llamas a la función.

var popup; 
​function openPop() { 
    if ("close" in popup) popup.close(); 
    popup = window.open("http://stackoverflow.com", "test", "width=200, height=200");​​​​​​​​ 
} 

Esto asegurará que la ventana emergente siempre aparezca en la parte superior.

+0

bien, este código cerrará mi ventana abierta anteriormente y la abrirá otra. No quiero cerrar mi ventana anterior – hunt

+0

@hunt: Como dije en mi comentario sobre la [respuesta de pranay_stacker] (http://stackoverflow.com/questions/2965754/set-the-focus-of-a-popup- window-everytime/2965817 # 2965817), el método de enfoque no funcionará en el navegador cruzado para ventanas emergentes. Estoy bastante seguro de que no hay otra manera de volver a enfocar la ventana. –

8
focusedWindow = window.open('two.html','two').focus(); 

anexar directamente el foco() para el prototipo muy window.open

+0

Solución simple ... Es WORKSSS – ELAYARAJA

+0

No funciona en safari en iphone – Zohaib

+0

No funciona en Edge y Firefox también. – sibbl

1

Compruebe la configuración de Firefox 2 en

  1. Ir a Herramientas -> Opciones -> Contenido
  2. Asegúrese de que " Habilitar JavaScript "está activado.
  3. Al lado de "Habilitar JavaScript", haz clic en el botón "Avanzado".
  4. Asegúrese de que hay una marca de verificación en el cuadro [x] subir o ventanas inferiores

Si el ajuste "Suba o ventanas inferiores" se apaga, entonces esto desactiva la window.focus() método.

2
var win = window.open('two.html','two'); 
win.document.getElementsByTagName("body")[0].focus(); //focus the body rather than the window. 
+0

Este enfoque funcionó para mí probado en Chrome48, FF42 e IE11. – Doug

+0

No funcionó para mí. Abre "two.html" en mi primera pestaña donde llamo a este código. Y sí, cambié el nombre var de 'ventana'. Pude arreglar este comportamiento llamando a la segunda línea un poco más tarde a través de setTimeout, pero luego no enfocó el cuerpo en i.e. Edge tampoco. – sibbl

6

Mi solución empírica que siempre funciona:

setTimeout('detail.focus()', 1); 

Al añadir .focus() justo después de abierta no siempre funciona, ni llamar a un .focus() sin setTimeout.

Sé que es feo (quería deshacerse de él en este momento, después de algunos años, sin éxito), y no sé las razones exactas por qué y cómo, pero funciona.

+0

Solucioné el problema de Firefox haciendo setTimeout (function() {window.open (...)}, 1) –

+0

según tengo entendido, setTimeout activará su script una vez que la última línea del script actual haya terminado de ejecutarse, pero no funcionará en los scripts multithreading porque el script temporizado se ejecutará a tiempo ... –

0
setTimeout(function() { 
    window.open('PageName', '', 'height=560,width=1120,resizable=no,left=100,top=50,screenX=100,screenY=50'); 
}, 100); 

-> Este código se usa para enfocar la ventana recién abierta. -> Póngalo en javascript. ('SetTimeout es una función incorporada de javascript') -> Sucede que cuando se abre la ventana emergente, irá detrás de la ventana anterior, por lo que arriba es muy útil para enfocar una nueva ventana.

+1

Bienvenido a Stack ¡Rebosar! En lugar de solo publicar un bloque de código, explique por qué este código resuelve el problema planteado. Sin una explicación, esta no es una respuesta. – Artemix

0

Es una solución de revestimiento, el uso de enfoque en su pop-up var:

popup=window.open('two.html','two'); 
popup.focus(); 

Esto siempre se abrirá su ventana emergente, incluso si no está cerrada.

0

Encontré una respuesta para mí que funciona. En el html del cuerpo emergente, agregue a la etiqueta del cuerpo onload = "this.window.focus()". Incluso si minimiza la ventana, aparece una copia de seguridad en el centro. Asegúrese de nombrar la ventana en el script de ejecución window.open ('url', 'some name', 'vars'); ¡Espero que esto te ayude!

0

Lamentablemente, algunos navegadores modernos todavía no son compatibles con las pestañas de enfoque, consulte this Firefox bug entry, por ejemplo.

Sin embargo, el siguiente código funciona bien para mí. Como solución, se vuelve a abrir una ventana/pestaña si no se puede enfocar:

var win = window.open("two.html", "two") 
    win.focus(); 
    setTimeout(function() { 
    if(document.hasFocus()) { 
     win.close(); 
     window.open("two.html", "two") 
    } 
    }, 1); 

En la primera línea se abre la ventana y trata de enfocar usando la segunda línea. Si ya existe una ventana con el nombre two, no se abre ninguna ventana/pestaña nueva, pero se vuelve a utilizar.

El truco ahora es que comprobamos si la ventana actual todavía tiene foco usando document.hasFocus(). Si es así, cerramos la ventana y lo volvemos a abrir. Esto es solo para navegadores que no admiten enfocar la pestaña que se va a reutilizar directamente. Actualmente, este es el caso de FF e IE/MS Edge. Chrome funciona bien

Sin embargo, directamente después de usar window.open, document.hasFocus() siempre devuelve verdadero (dicho esto, también en Chrome). La solución alternativa es usar setTimeout un ms más tarde.

Cuestiones relacionadas