Je tiens à appeler une fonction js d’iframe à une fenêtre parente
Réponses
Trop de publicités? <a onclick="parent.abc();" href="#" >Call Me </a>
Voir window.parent
Renvoie une référence au parent de la fenêtre ou de la sous-trame actuelle.
Si une fenêtre n'a pas de parent, sa propriété parent est une référence à elle-même.
Lorsqu'une fenêtre est chargée dans un <iframe>
, <object>
ou <frame>
, son parent est la fenêtre avec l'élément incorporant la fenêtre.
J'ai récemment dû découvrir pourquoi cela ne fonctionnait pas aussi.
Le javascript que vous voulez appeler depuis l'iframe enfant doit être dans la tête du parent. Si c'est dans le corps, le script n'est pas disponible dans la portée globale.
<head>
<script>
function abc() {
alert("sss");
}
</script>
</head>
<body>
<iframe id="myFrame">
<a onclick="parent.abc();" href="#">Click Me</a>
</iframe>
</body>
J'espère que cela aidera quelqu'un qui trébuche sur cette question à nouveau.
J'ai posté ceci comme une réponse distincte, comme elle est sans rapport avec ma réponse existant.
Cette question a récemment surgi de nouveau pour accéder à un parent d'un iframe référencement d'un sous-domaine et les correctifs n'ont pas de travail.
Cette fois, la réponse a été de modifier le document.de domaine de la page parent et l'iframe être le même. Ce sera fou de la même origine vérification de la politique en pensant qu'ils co-exister sur le même domaine (sous-domaines sont considérés comme un hôte différent et ne parviennent pas la même origine à vérifier).
Insérer le texte suivant à l' <head>
de la page dans l'iframe pour correspondre au domaine parent (ajuster en fonction de votre doctype).
<script>
document.domain = "mydomain.com";
</script>
Veuillez noter que cela provoquera une erreur sur localhost développement, donc à utiliser un chèque comme suit pour éviter l'erreur:
if (!window.location.href.match(/localhost/gi)) {
document.domain = "mydomain.com";
}
Une autre addition pour ceux qui en ont besoin. La solution d'Ash Clarke ne fonctionne pas si elle utilise des protocoles différents, alors assurez-vous que si vous utilisez SSL, votre iframe utilise également le protocole SSL, sinon la fonction sera interrompue. Sa solution a fonctionné pour les domaines mêmes, alors merci pour cela.