2009-11-22 25 views
35

Llamo a la función javascript window.open() para cargar otra URL en una ventana emergente. Una vez que los usuarios terminan, los lleva a la última página que tiene un enlace que dice cerrar ventana que llama a la función window.close(). Ahora, cuando esa página se cierra, necesito actualizar algo en la página original que abrió la ventana. ¿Hay alguna manera de hacer esto? Tengo que llamar a una función que está en mi página original.¿Cómo ejecutar la función de la ventana principal cuando se cierra la ventana secundaria?

+0

Ver http://stackoverflow.com/questions/1112340/how-to-run-function-of-parent-window-when-child-window-closes –

Respuesta

54

Usted puede tratar de alguna manera esto:

ventana Spawned: Ventana

window.onunload = function (e) { 
    opener.somefunction(); //or 
    opener.document.getElementById('someid').innerHTML = 'update content of parent window'; 
}; 

Padres:

window.open('Spawn.htm',''); 
window.somefunction = function(){ 

} 

No deberías haz esto en th e los padres, de lo contrario opener.somefunction() no funcionará, haciendo window.somefunction hace pública algunaFuncion como:

function somefunction(){ 

} 
+1

Eso fue exactamente lo que estaba buscando funciona muy bien. – ngreenwood6

+0

+1, me ayudó en el momento adecuado. Escribir window.somefunction = function {....} es lo mismo que escribir function somefunction() {....} –

+1

Esto no funciona en IE si la ventana generada y la ventana principal no son del mismo dominio – Binod

9

Probablemente desee utilizar el evento 'onbeforeunload'. Le permitirá llamar a una función en la ventana principal del niño inmediatamente antes de que se cierre la ventana secundaria.

Así que probablemente algo como esto:

window.onbeforeunload = function (e) { 
    window.parent.functonToCallBeforeThisWindowCloses(); 
}; 
+0

ok que se parece a lo que estoy buscando, pero ¿cómo sabrá qué ventana? Estoy hablando de.Por ejemplo, si hago window.open() y luego lo agrego a continuación, ¿sabrá su ventana o cómo la adjuntaré a esa ventana? – ngreenwood6

+0

Lo pondrá antes de descargar en una etiqueta de script en el HTML de su ventana secundaria. Como la ventana secundaria solo tiene un padre, el navegador sabe automáticamente cuál es esa ventana principal. –

+0

así que si tengo una función llamada doSomething() en la ventana primaria pero no está definida en la ventana secundaria, ¿todavía me permitirá ejecutarla? – ngreenwood6

4

Las respuestas a medida que se requieren son para agregar código a la ventana generado. Eso es un acoplamiento innecesario.

// In parent window 
var pop = open(url); 
pop.onunload = function() { 
    // Run your code, the popup window is unloading 
    // Beware though, this will also fire if the user navigates to a different 
    // page within thepopup. If you need to support that, you will have to play around 
    // with pop.closed and setTimeouts 
} 
0

Sé que este post es viejo, pero me pareció que esto realmente funciona bien:

window.onunload = function() { 
    window.opener.location.href = window.opener.location.href; 
}; 

La parte window.onunload fue la pista que encontré buscando en Google esta página. Gracias, @jerjer!

-2

Verificar cotización link. Esto sería útil también ..

En la ventana de Padres:

function OpenChildAsPopup() { 
     var childWindow = window.open("ChildWindow.aspx", "_blank", 
     "width=200px,height=350px,left=200,top=100"); 
     childWindow.focus(); 
} 

function ChangeBackgroudColor() { 
     var para = document.getElementById('samplePara'); 
     if (para !="undefied") { 
      para.style.backgroundColor = '#6CDBF5'; 
     } 
} 

ventana primaria Formato HTML:

<div> 
    <p id="samplePara" style="width: 350px;"> 
      Lorem ipsum dolor sit amet, consectetuer adipiscing elit. 
    </p><br /> 
<asp:Button ID="Button1" Text="Open Child Window" 
     runat="server" OnClientClick="OpenChildAsPopup();"/> 
</div> 

En Ventana Niño:

// This will be called when the child window is closed.  
    window.onunload = function (e) { 
     opener.ChangeBackgroudColor(); 
     //or you can do 
     //var para = opener.document.getElementById('samplePara'); 
     //if (para != "undefied") { 
     // para.style.backgroundColor = '#6CDBF5'; 
     //} 
    }; 
7

Este es un antiguo puesto , pero pensé en agregar otro método para hacer esto:

var win = window.open("http://www.google.com"); 

var winClosed = setInterval(function() { 

    if (win.closed) { 
     clearInterval(winClosed); 
     foo(); //Call your function here 
    } 

}, 250); 

No tiene que modificar el contenido ni utilizar ningún controlador de eventos desde la ventana secundaria.

+0

¡Eres un genio, hermano! ¡¡¡Gracias!!! –

0

Junto con la respuesta jerjer (arriba), a veces en su ventana padre y ventana secundaria no son tanto externos o ambos interno verá un problema de apertura indefinida, y no se puede acceder a las propiedades de páginas principal, ver window.opener is undefined on Internet Explorer

Cuestiones relacionadas