Solución:
Del manual fino:
Hace un solicitud para llevar la ventana al frente. Puede fallar debido a la configuración del usuario y no se garantiza que la ventana esté al frente antes de que regrese este método.
Énfasis mío. Vocación focus()
es solo una solicitud y el navegador es libre de ignorarlo y, en general, debe esperar que lo ignoren. Considere qué tipo de cosas nefastas podría hacer al cambiar el enfoque a una ventana pequeña mientras alguien está escribiendo si necesita algunas razones por las que un navegador ignoraría su solicitud.
Si necesitas focus()
trabajar para que su aplicación funcione, entonces necesita rediseñar su aplicación para que no necesite llamar focus()
.
Puedo ver por qué un navegador / sistema operativo no permite que las ventanas secundarias se hagan cargo del enfoque (abuso de poder). Aquí hay una solución alternativa:
- En la ventana principal, declare una función en “window.external” que activará “alert ()” o “confirm ()” de Javascript.
- Invoque esa función desde la ventana secundaria.
- El navegador puede ignorar una solicitud de una ventana secundaria que quiera controlar el foco (por ejemplo, window.opener.focus ()), pero el navegador debe cumplir con una solicitud de una ventana principal que activa una alerta () o una acción de confirmación () , que requiere centrarse en la ventana principal.
Padre JS:
var child = window.open('child.html', 'child');
window.external.comeback = function() {
var back = confirm('Are you sure you want to comback?');
if(back) {
child.close();
} else {
child.focus();
}
}
Niño JS:
// assuming you have jQuery
$('.btn').click() {
window.opener.external.comeback();
};
– Estoy usando este código en una aplicación del mundo real para manejar una solicitud de pago que se ejecuta en la ventana secundaria, y necesito regresar con gracia a la ventana principal.
Ver: SimplifySites.com