2010-04-24 24 views
12

me gustaría tener un botón en una página web con el siguiente comportamiento:En Google Chrome, ¿cómo traigo una ventana emergente existente al frente usando javascript desde la ventana principal?

  • En el primer clic, abrir una ventana emergente.
  • En clics posteriores, si la ventana emergente aún está abierta, simplemente llévela al frente. Si no, vuelve a abrir.

El código siguiente funciona en Firefox (Mac & Windows), Safari (Mac & Windows), e IE8. (Todavía no he probado IE6 o IE7.) Sin embargo, en Google Chrome (ambos Mac & Windows), los clics posteriores no pueden mostrar el mensaje emergente existente al frente como se desea.

¿Cómo puedo hacer que esto funcione en Chrome?

<head> 
    <script type="text/javascript"> 
    var popupWindow = null; 
    var doPopup = function() { 
     if (popupWindow && !popupWindow.closed) { 
     popupWindow.focus(); 
     } else { 
     popupWindow = window.open("http://google.com", "_blank", 
      "width=200,height=200"); 
     } 
    }; 
    </script> 
</head> 

<body> 
    <button onclick="doPopup(); return false"> 
    create a pop-up 
    </button> 
</body> 

Antecedentes: Estoy reiteró la solicitud this question específicamente para Google Chrome, como creo que mi código resuelve el problema, al menos para otros navegadores modernos y IE8. Si hay una etiqueta preferida para hacerlo, házmelo saber.

+1

Parece que se informó de este problema ~ hace 1.5 años: http://code.google.com/p/chromium/issues/detail?id=1674 – brahn

Respuesta

8

No puede. Window.focus está deshabilitado en Chrome por razones de seguridad, y es poco probable que cambie.

Debes cerrar y volver a abrir la ventana correspondiente.

+3

Oof, eso es frustrante. Por curiosidad, ¿cuál es la preocupación de seguridad? Veo una discusión sobre lo que podría ser un razonamiento relacionado [aquí] (http://code.google.com/p/chromium/issues/detail?id=1383#c8), aunque eso parece más sobre el foco de robo emergente desde la ventana principal en lugar de desde la ventana principal dando atención al menú emergente (que es lo que estoy buscando). Gracias! – brahn

+1

También me gustaría saber sobre las preocupaciones involucradas. – marquito

+0

Después de todos estos años, esta sigue siendo una gran frustración como usuario, y mucho menos como desarrollador. Sería bueno que alguien proporcione un enlace a algo que explique muy bien el motivo porque "por razones de seguridad" suena como que las compañías de trenes dicen "para el beneficio de los pasajeros" cuando imponen alguna regulación conveniente que evidentemente no lo es. –

0

¿Por qué no hacer simplemente un popopWindow.focus() después de la llamada window.open? No estaría de más hacerlo también, y debería garantizar que su nueva ventana se muestre encima de la actual.

+0

El código actual da como resultado el comportamiento deseado (es decir, emergente en la parte superior) con la nueva ventana - el problema es con una ventana existente. – brahn

0

Debe configurar la ventana original para desenfocar y la nueva ventana para enfocar.

var popup = { //popup = object literal representing your popup 
    execute = (function() { 
     popup.win = window.open(); 
     popup.win.focus(); 
    }()); 
}; 
window.blur(); 
+0

No estoy seguro de entender este código, pero al igual que el comentario anterior de Chris, parece asegurar que la ventana emergente se enfoca cuando se abre por primera vez, pero no hace nada para enfocarlo en un clic posterior del botón. – brahn

+0

Eso es correcto. No hay un método "siempre disponible" disponible para JavaScript y nunca habrá tal cosa. Al hacer clic fuera de la ventana de la ventana emergente, perderá el foco y se quedará atrás de la ventana que recibe el foco. La única forma de cambiar esto es volver a hacer clic en la ventana emergente. –

+0

OK, ¡gracias por aclarar! – brahn

0

el siguiente código funciona para mí cuando se le llama en un manejador onclick:

var popup = window.open('', 'popup-name', 'resizable,width=480=height=575'); 

if(popup.location == 'about:blank') { 
    popup.location = 'http://google.com'; 
    return; 
} 

Este código funciona al tratar de acceder a la ubicación de la ventana emergente, si su about: blank es una nueva ventana emergente y la url Está establecido. De lo contrario, si la ventana con el mismo nombre 'popup-name' ya está abierta, la ventana emergente se enfoca. Este código no necesita ser llamado desde un controlador onclick, de lo contrario no funcionará.

Cuestiones relacionadas