web-dev-qa-db-fra.com

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

J'ai un document parent avec un iframe intégré. À l'intérieur de l'iframe, j'ai un champ de téléchargement. Une fois que 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 sur true, afin que le parent sache que le téléchargement a commencé.

Est-ce que quelqu'un sait comment faire ça?

J'essayais cela, mais cela n'a pas fonctionné:

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');
    }
});
44
Nic Hubbard

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

Cela signifie que

var foo = 'bar';

est analogue à

window.foo = 'bar';

Ce qui signifie que vous pouvez lire la portée globale de l'objet anywindow auquel vous pouvez obtenir une référence. Ce que nous pouvons également impliquer ici, c'est que l'utilisation de window est implicite. Même lorsque vous ne tapez pas explicitement "fenêtre", il est là quand même.

Et comme les cadres eux-mêmes sont également auto-exposés en tant que propriétés DOM de l'objet window courant, cela signifie que vous pouvez également accéder à l'objet window de tout autre cadre.

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

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

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

3
Marta