Question

Y at-il un moyen facile de définir une fonction « rappel » dans une nouvelle fenêtre qui est ouverte en javascript? Je voudrais exécuter une fonction du parent de la nouvelle fenêtre, mais je veux que le parent soit en mesure de définir le nom de cette fonction particulière (il ne doit pas être codé en dur dans la nouvelle page windows).

Par exemple, dans le parent je:

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

Et dans la fenêtre de l'enfant que je veux:

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

La question est de savoir comment créer cette fonction de OpenNewWindow et RunCallbackFunction. Je pensais que d'envoyer le nom comme paramètre de requête à la nouvelle fenêtre de la fonction (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é), qui fonctionne, mais je me disais qu'il y ait une autre, ou mieux accomplir cela, peut-être quelque chose qui ne nécessite même pas bricoler côté serveur.

javascript pur, des solutions côté serveur et jQuery (ou d'autres cadres) sont tous les bienvenus.

Était-ce utile?

La solution

Mise à jour pour les commentaires: Si vous ouvrez votre fenêtre via window.open() puis dans votre page d'enfant, vous pouvez définir une fonction dans l'enfant à juste une référence pointant vers une fonction de parent, ont donc cela dans la page enfant:

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

Alors dans votre parent (ouvreur), ensemble cette fonction lorsque cette charge de la fenêtre des enfants, 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; };

affecte la fonction de votre parent à présent être la cible de cet enfant ... et vous pouvez pointer chaque enfant à une autre fonction si vous le souhaitez, ils sont tous indépendants.

Autres conseils

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

newWindow.onload = function() {
    $(newWindow.document.body).addClass('new-window-body-class');
};
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top