Por lo general, los navegadores no permiten que una ventana / pestaña secundaria cierre su abridor con el script. Y, sin embargo, permiten que el niño modifique la ubicación de la pestaña / ventana del abridor .
Esto no es del todo exacto. Si lees el texto de MDN citado con más cuidado, en realidad se refiere a la apertura de parent
, no la relación con su popup
. La restricción real con la que probablemente te encuentres es:
- Los scripts solo pueden cerrar las ventanas que se abrieron originalmente con el script.
Entonces, en su ejemplo específico, popup
fue abierto por un script, pero opener
fue abierto por un usuario y, por lo tanto, opener
no puede ser close
d por sí mismo o por popup
.
Imagina un escenario donde hay dos ventanas emergentes
- pestaña abierta por el usuario (no puede ser
close
d)
- Popup 1 (
opener
es una pestaña abierta por el usuario)
- Ventana emergente 2 (
opener
es ventana emergente 1)
Popup 2 can close
popup 1 en este escenario.
Sin embargo, la ventana emergente 1 no puede close
la pestaña abierta por el usuario porque viola la regla anterior.
-
En Chrome & Firefox, no importa si el popup
s es el mismo origen que su opener
s. El popup
puede cambiar el location
o el close
el opener
según lo deseado, sujeto a mi primer punto anterior.
-
En IE11, popup
puede close
the parent
, pero no puede cambiar parent.location
a menos que cumpla con Política del mismo origen . (da como resultado una nueva ventana emergente si lo intentas)
También, me gustaría aclarar que cualquier opener
puede close
su propio popup
s o cambiar su location
sin restricción. El acceso a los contenidos de popup
todavía está sujeto a la política de Same Origin por razones de seguridad.
Esto conduce a una solución curiosa mediante la cual puedes crear una página que no hace más que cerrarse con el script tan pronto como sea posible. se carga, y luego cambia la ubicación de la pestaña / ventana principal a esta nueva página, cerrándola de manera efectiva. ... ¿esta solución crea efectivamente una puerta trasera?
Para responder a su pregunta directamente, no hay tal solución. El ejemplo vinculado producirá el error:
Es posible que los scripts no cierren las ventanas que no se abrieron con el script.
A menos que se encuentre en una situación de 2 ventanas emergentes, como expliqué anteriormente, en cuyo caso el popup
podría simplemente close
su opener
directamente. Sin embargo, la solución sería innecesaria en ese caso.