Eh bien, j'ai un IFrame, qui appelle une même page de domaine. Mon problème est que je souhaite accéder à certaines informations de cet Iframe parent à partir de cette page appelée (à partir de JavaScript). Comment puis-je accéder à cet Iframe?
Détails: Il existe plusieurs Iframes comme celui-ci, qui peuvent avoir la même page chargée, car je programme un environnement Windows. J'ai l'intention de fermer cette Iframe, c'est pourquoi j'ai besoin de savoir laquelle je dois fermer de l'intérieur de lui. J'ai un tableau gardant des références à ces Iframes.
EDIT: les iframes sont générés dynamiquement
javascript
iframe
José Leal
la source
la source
Réponses:
Vous pouvez également définir le nom et l'ID sur des valeurs égales
vous pourrez donc utiliser le code suivant dans la page enfant
la source
iframe
fichier trop petit. Mais pourquoi ça marche?window.name
renvoie une chaîne. Qu'y a-t-il de différent dans l'utilisationwindow.name
que de simplement passer le nom de l'ID sous forme de chaîne qui ne fonctionne pas.)?Appelez simplement
window.frameElement
depuis votre page encadrée. Si la page n'est pas dans un cadre, alorsframeElement
seranull
.L'autre manière (obtenir l'élément window dans un cadre est moins trivial) mais par souci d'exhaustivité:
la source
window.frameElement
renvoienull
lorsque la fenêtre et l'iframe ont des domaines différents, c'est-à-dire la messagerie cross-origin.Je recommanderais d'utiliser l' API postMessage .
Dans votre iframe, appelez:
Dans la page où vous incluez l'iframe, vous pouvez écouter des événements comme celui-ci:
D'ailleurs, il est également possible de faire des appels vers d'autres fenêtres, et pas seulement des iframes.
En savoir plus sur l'API postMessage sur le blog John Resigs ici
la source
<iframe>
contenu n'a rien à savoir sur le parent et vice versa. Ils n'ont qu'à obéir au simple contrat de message. Impressionnant!'*'
.'*'
sur les clients. Toutes les autres solutions donnent une erreur sur un navigateur Chrome traitant les fichiers du dossier clients comme n'étant pas de la même origine car un serveur n'est pas configuré. C'est la meilleure et la seule solution: dyn-web.com/tutorials/iframes/postmessageAncienne question, mais j'ai juste eu ce même problème et j'ai trouvé un moyen d'obtenir l'iframe. Il s'agit simplement d'itérer dans le tableau frames [] de la fenêtre parente et de tester le contentWindow de chaque frame par rapport à la fenêtre dans laquelle votre code s'exécute. Exemple:
Ou, en utilisant jQuery:
Cette méthode évite d'attribuer un ID à chaque iframe, ce qui est bien dans votre cas car elles sont créées dynamiquement. Je n'ai pas pu trouver de moyen plus direct, car vous ne pouvez pas obtenir l'élément iframe en utilisant window.parent - il va directement à l'élément de fenêtre parent (en ignorant l'iframe). Les parcourir en boucle semble donc le seul moyen, à moins que vous ne souhaitiez utiliser des identifiants.
la source
vous pouvez utiliser
parent
pour accéder à la page parent. Donc, pour accéder à une fonction, ce serait:la source
Une fois que l'identifiant de l'iframe est défini, vous pouvez accéder à l'iframe à partir du document interne comme indiqué ci-dessous.
Fonctionne bien dans IE, Chrome et FF.
la source
var iframe = frameElement
Peut-être juste utiliser
dans votre iframe pour obtenir le cadre / windows appelant. Si vous aviez plusieurs trames d'appel, vous pouvez utiliser
la source
Essayez ceci, dans votre cadre parent, configurez vos IFRAME comme ceci:
Notez que l'id de chaque trame est passé en tant qu'ancre dans le src.
puis dans votre html interne, vous pouvez accéder à l'identifiant du cadre dans lequel il est chargé via location.hash:
alors vous pouvez accéder à parent.document.getElementById () pour accéder à la balise iframe depuis l'intérieur de l'iframe
la source
la source