Sé que esta pregunta se hizo antes, pero no puedo hacer que esto funcione.
Tengo un .aspx que contiene una función en la etiqueta del cuerpo onunload. Esto debería actualizar la página principal después de cerrar la página secundaria.
En este punto, necesito saber si la página se actualizó/recargó, porque esta lógica activará la llamada de función cada vez y cerrará mi página "secundaria".
Este es mi código:
<script type="text/javascript"> function refreshparent(){ window.opener.location.reload(true); window.close(); } </script>Y esto es lo que quiero hacer:
<script type="text/javascript"> function refreshparent(){ if(page.wasclosed){ window.opener.location.reload(true); window.close(); }else{ //do nothing } } </script>esta es una parte de mi aspx:
<html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body style="background-color: #d6eceb" onunload="refreshparent()">Una forma de comunicarse entre varias pestañas o ventanas (que tienen algún origen, por ejemplo, https://yourdomain.com/ ) es con la API de canal de difusión . Con él, puede abrir comunicaciones entre las pestañas y enviar datos de un lado a otro.
Esto podría ser útil en su caso para que la página secundaria le diga a la ventana principal que se va a cerrar. Use el evento beforeunload para desencadenar el envío de un mensaje antes de que se cierre la ventana secundaria.
Aplique los siguientes scripts a sus respectivos archivos.
Este script abre un canal de transmisión y escucha los mensajes entrantes. Siempre que el mensaje sea una cadena igual a 'refresh' , la página se recargará.
<script type="text/javascript"> const channelName = 'form-closing-channel'; const channel = new BroadcastChannel(channelName); channel.addEventListener('message', ({ data }) => { if (data === 'refresh') { window.location.reload(); } }); </script> Este script solo envía un mensaje a otras ventanas principales abiertas justo antes de que se cierre. El mensaje que se envía será 'refresh' , lo que debería activar la recarga en el padre.
<script type="text/javascript"> const channelName = 'form-closing-channel'; const channel = new BroadcastChannel(channelName); window.addEventListener('beforeunload', () => { channel.postMessage('refresh'); }); </script> Importante
Tenga en cuenta que todas las ventanas principales responderán al mensaje recibido. Por ejemplo, tiene 3 ventanas principales abiertas y 1 ventana secundaria abierta, cerrar la ventana secundaria enviará 'refresh' a todas las ventanas principales y todas se recargarán.