Existe-t-il un moyen simple de définir une fonction de "rappel" dans une nouvelle fenêtre ouverte en javascript? Je voudrais exécuter une fonction du parent à partir de la nouvelle fenêtre, mais je veux que le parent puisse définir le nom de cette fonction particulière (donc elle ne devrait pas être codée en dur dans la nouvelle page Windows).
Par exemple, chez le parent que j'ai:
function DoSomething { alert('Something'); }
...
<input type="button" onClick="OpenNewWindow(linktonewwindow,DoSomething);" />
Et dans la fenêtre enfant, je veux:
<input type="button" onClick="RunCallbackFunction();" />
La question est de savoir comment créer ces fonctions OpenNewWindow
et RunCallbackFunction
. J'ai pensé à envoyer le nom de la fonction en tant que paramètre de requête à la nouvelle fenêtre (où le script côté serveur génère les appels de fonction appropriés dans le code HTML de l'enfant généré), ce qui fonctionne, mais je me demandais s'il y en avait un autre ou une meilleure façon d'accomplir cela, peut-être quelque chose qui ne nécessite même pas de bricolage côté serveur.
Le javascript pur, les solutions côté serveur et jQuery (ou d'autres frameworks) sont tous les bienvenus.
Mis à jour pour les commentaires: Si vous ouvrez votre fenêtre via window.open()
puis dans votre page enfant vous peut définir une fonction dans l'enfant pour être juste une référence pointant vers une fonction parent, alors ayez ceci dans la page enfant:
var RunCallbackFunction = function() { }; //reference holder only
Ensuite, dans votre parent (ouvre), définissez cette fonction lorsque cette fenêtre enfant se charge, comme ceci:
//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; };
Cela affecte la fonction de votre parent à être désormais la cible de cet enfant ... et vous pouvez pointer chaque enfant vers une fonction différente si vous le souhaitez, ils sont tous indépendants.