44 votes

Définir une variable dans la fenêtre parent à partir d'un iframe

J'ai un document parent avec une iframe intégrée. Dans l'iframe, j'ai un champ de téléchargement. Lorsque l'utilisateur sélectionne un fichier à télécharger, je déclenche un événement de changement jQuery. Sur cet événement, je veux définir une variable dans la fenêtre parent à true, afin que le parent sache que le téléchargement a commencé.

Quelqu'un sait-il comment faire ?

J'ai essayé ça, mais ça n'a pas marché :

var test;
$("#newsletter_email").change(function() {
  parent.window.test = true;

});

$('#send').click(function() {
    if (test) {
        alert('File has been uploaded!');
    } else {
        alert('You need to upload a file');
    }
});

85voto

Peter Bailey Points 62125

Les variables dans la portée globale sont auto-exposées en tant que propriétés DOM de leur contenu. window objet.

Cela signifie que

var foo = 'bar';

est analogue à

window.foo = 'bar';

Ce qui signifie que vous pouvez lire la portée globale de tout window dont vous pouvez obtenir une référence. Ce que l'on peut également déduire ici, c'est que l'utilisation de la fonction window es implicite . Même si vous ne tapez pas explicitement "fenêtre.", elle est quand même présente.

Et comme les cadres eux-mêmes sont également auto-exposées en tant que propriétés DOM de l'élément courant window ce qui signifie que vous pouvez accéder à n'importe quel autre objet du cadre window également.

El parent propriété de window contient une référence à l'objet window de l'objet parent de cette fenêtre (s'il y en a un). Puisque les iframes ont très certainement une fenêtre parente, tout ce que je viens de taper se résume à ceci

// set the global variable 'foo' in the parent global scope
parent.foo = 'bar';

3voto

Marta Points 26

Vous pouvez également le stocker dans le localStorage et y lire et écrire, à condition que le document principal et l'iframe partagent le même domaine.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X