Les scripts d’iframe peuvent-ils interagir avec les scripts de la page principale

J’ai un éditeur avec un téléchargeur multi-images SWF. Etant donné que tout le monde n’aura pas besoin de télécharger des images dans son article, je dois charger cet uploader d’image de manière dynamic si nécessaire. Je dois le charger dans un iframe car le programme de téléchargement a besoin de scripts externes pour être chargé à l’avance. Et comme j’ai besoin de sa variable de rappel pour mon éditeur, je veux savoir si les scripts d’iframe peuvent interagir avec les scripts de la page principale. Ou si je ne peux pas faire ça, quelle est la façon alternative de le faire?

Si elles sont sur le même domaine, oui.

L’object parent est la fenêtre parente de l’iframe.

Si vous avez une variable a dans la scope globale de la fenêtre parente, vous pouvez la manipuler dans l’iframe comme ceci:

 parent.a = "new value"; 

De même, si a est une fonction dans la scope globale de la fenêtre parente, vous pouvez l’appeler comme suit:

 parent.a(args); 

postMessage en HTML 5, pris en charge par Internet Explorer 8.0+, Firefox 3.0+, Safari 4.0+, Chrome 1.0+ et Opera 9.5+, est la façon dont je l’utilise. Si le manque de support dans IE7 et les versions antérieures ne vous gêne pas, voici comment le mettre en œuvre.

Javascript dans la fenêtre principale:

 window.addEventListener("message", receiveMessage, false); function receiveMessage(event){ var source = event.source.frameElement; //this is the iframe that sent the message var message = event.data; //this is the message //do something with message } 

Javascript dans l’iframe;

 var message='hello, big window!'; //could be of any type, ssortingng, number, array, object, have fun window.parent.postMessage(message,'*'); //the '*' has to do with cross-domain messaging. leave it like it is for same-domain messaging. 

Bien sûr, vous pouvez le faire dans l’autre sens, en faisant en sorte que la fenêtre principale envoie des messages à l’iframe et en dialoguant de la sorte.

Pour étendre la réponse d’Andy, les scripts d’iframe peuvent-ils interagir avec les scripts de la page principale :

Utiliser le plugin jQuery.postMessage http://benalman.com/code/projects/jquery-postmessage/docs/files/jquery-ba-postmessage-js.html

Navigateurs testés Internet Explorer 6-8, Firefox 3, Safari 3-4, Chrome, Opera 9.

Les scripts d’iframe peuvent-ils interagir avec les scripts de la page principale

Uniquement si l’iframe et son parent ont exactement le même domaine, en raison de la même politique d’origine ( lien MDC ).

Si l’iframe provient d’un domaine différent, mais que vous avez le contrôle sur le contenu, vous pouvez communiquer entre les deux de deux manières différentes. Le plus simple est de “parler” à travers des paires clé / valeur dans l’URL de l’iFrame, étant donné que le parent et l’iFrame ont access à cela.

Une approche plus compliquée consiste à utiliser un proxy iFrame, qui est très bien décrit ici: http://www.julienlecomte.net/blog/2007/11/31/ qui utilise Yahoo Pipes pour envoyer des messages très facilement.