2010-05-09 6 views
21

¿Existe alguna manera fácil de establecer una función de "devolución de llamada" en una nueva ventana que se abre en javascript? Me gustaría ejecutar una función del elemento principal desde la nueva ventana, pero quiero que el padre pueda establecer el nombre de esta función en particular (por lo que no debe estar codificada en la nueva página de Windows).Establecer una función de devolución de llamada a una nueva ventana en javascript

Por ejemplo, en los padres que tienen:

function DoSomething { alert('Something'); } 
... 
<input type="button" onClick="OpenNewWindow(linktonewwindow,DoSomething);" /> 

Y en la ventana secundaria que quieren:

<input type="button" onClick="RunCallbackFunction();" /> 

La pregunta es cómo crear esta OpenNewWindow y RunCallbackFunction funciones. Pensé en enviar el nombre de la función como un parámetro de consulta a la nueva ventana (donde el script del lado del servidor genera las llamadas de función apropiadas en el HTML del hijo generado), que funciona, pero estaba pensando si hay otra o mejor manera de lograrlo esto, tal vez algo que ni siquiera requiere retoques en el lado del servidor.

Pure javascript, soluciones del lado del servidor y jQuery (u otros marcos) son bienvenidos.

Respuesta

46

Actualización de comentarios: Si va a abrir la ventana a través de window.open() a continuación en su página secundaria puede establecer una función en el niño a ser sólo una referencia que apunta a una función madre, también lo han hecho esto en la página niño :

var RunCallbackFunction = function() { }; //reference holder only 

Luego, en su padre (abridor), establecer que la función cuando se carga la ventana que los niños, como este:

//random function you want to call 
function myFunc() { alert("I'm a function in the parent window"); } 

//to actually open the window.. 
var win = window.open("window.html"); 
win.onload = function() { win.RunCallbackFunction = myFunc; }; 

esto asigna la función en su padre para ahora ser el blanco de esa niño ... y puede señalar a cada niño a una función diferente si lo desea, todos son independientes.

+0

No deseo marcar el nombre de la función en la ventana secundaria. Ese era un requisito. La ventana principal puede tener varios lugares donde abre la misma ventana secundaria pero con diferentes funciones de devolución de llamada. – SztupY

+1

@SztupY - Entonces simplemente cambie el código para hacer la misma referencia en la ventana secundaria, en un momento ajustaré la respuesta. –

+0

Pero si el objeto principal abre varias ventanas, ¿cómo podría saber cada una de las funciones a llamar? Todos llamarán a la última función establecida. – SztupY

-2
var newWindow = window.open(window.location.origin); 

newWindow.onload = function() { 
    $(newWindow.document.body).addClass('new-window-body-class'); 
}; 
+4

No veo muy bien cómo responde esto a la pregunta, o incluso lo ayuda. – Chayemor

Cuestiones relacionadas