web-dev-qa-db-fra.com

Comment exécuter la fonction de la fenêtre parente lorsque la fenêtre enfant se ferme?

J'appelle la fonction javascript window.open () pour charger une autre URL dans une fenêtre contextuelle. Une fois que les utilisateurs ont terminé, ils sont dirigés vers la dernière page contenant un lien indiquant la fermeture de la fenêtre qui appelle la fonction window.close (). Maintenant, quand cette page se ferme, je dois mettre à jour quelque chose dans la page d'origine qui a ouvert la fenêtre. Y a-t-il un moyen de faire ça? Je dois appeler une fonction qui se trouve dans ma page d'origine.

40
ngreenwood6

Vous pouvez en quelque sorte essayer ceci:

Fenêtre engendrée: 

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

Fenêtre Parent:

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

}

Vous ne devriez pas faire cela sur le parent, sinon opener.somefunction () ne fonctionnera pas.

function somefunction(){

}
58
jerjer

Vous voudrez probablement utiliser l'événement ' onbeforeunload '. Cela vous permettra d'appeler une fonction dans la fenêtre parente à partir de l'enfant immédiatement avant la fermeture de la fenêtre par enfant.

Donc probablement quelque chose comme ça:

window.onbeforeunload = function (e) {
    window.parent.functonToCallBeforeThisWindowCloses();
};
9
Darrell Brogdon

Ceci est un ancien post, mais je pensais ajouter une autre méthode pour le faire:

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

var winClosed = setInterval(function () {

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

}, 250);

Il n'est pas nécessaire de modifier le contenu ni d'utiliser de gestionnaire d'événement à partir de la fenêtre enfant.

8
user3886234

Les réponses telles qu’elles vous obligent à ajouter du code à la fenêtre générée. C'est un couplage inutile.

// 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
}
4
Juan Mendes

Je sais que ce post est vieux, mais j'ai trouvé que cela fonctionne vraiment bien:

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

La partie window.onunload était l'indication que j'ai trouvée googler cette page. Merci, @jerjer!

0
Sablefoste

Avec jerjer answer (top), parfois dans votre fenêtre parent et votre fenêtre enfant ne sont pas tous les deux externes ou internes, vous verrez un problème d’ouvreur non défini et vous ne pouvez pas accéder aux propriétés de la page parent, voir window.opener n’est pas défini sur Internet Explorer

0
yesh