comment accéder à la page parent d'iFrame en utilisant jquery?

267

J'ai un iframe et pour accéder à l'élément parent, j'ai implémenté le code suivant:

window.parent.document.getElementById('parentPrice').innerHTML

Comment obtenir le même résultat en utilisant jquery?
MISE À JOUR : Ou comment accéder à la page parent d'iFrame en utilisant jquery?

Amr Elgarhy
la source

Réponses:

489

Pour rechercher dans le parent de l'iFrame, utilisez:

$('#parentPrice', window.parent.document).html();

Le deuxième paramètre du wrapper $ () est le contexte dans lequel effectuer la recherche. Il s'agit par défaut du document.

Pim Jager
la source
18
Cool - vous avez reconnu les remerciements avant de vous remercier. StackOverflow a peut-être des problèmes avec les fuseaux horaires?
belugabob
21
Vous pouvez également faire: $ (window.parent.document) .find ("# parentPrice"). Html ();
jhorback
@belugabob C'est la faute d'un sorcier.
Erik Escobedo
1
Pour ceux qui ont lancé un windoid avec window.open, n'oubliez pas cet ancien window.opener.document standard JS. $ ("# someDiv", window.opener.document) fonctionne.
jjohn
2
Cela ne fonctionnera que si la source de l'iframe a chargé jQuery. D'après mon expérience, la source iframe n'aurait pas jQuery mais la nécessité d'appeler l'une des fonctions jQuery du parent est souvent nécessaire. Pour ce faire, utilisez: window.document. $ ("# ParentPrice"). Html () Telle était la réponse publiée par Álvaro G. Vicario.
David Kinkead
39

comment accéder à la page parent d'iFrame à l'aide de jquery

window.parent.document.

jQuery est une bibliothèque au-dessus de JavaScript, pas un remplacement complet pour elle. Vous n'avez pas à remplacer chaque dernière expression JavaScript par quelque chose impliquant $.

bobince
la source
6
+1. jQuery est génial, mais beaucoup de réponses à des problèmes simples semblent être «utiliser jQuery». Si vous chargez la bibliothèque de toute façon, très bien, mais ne la chargez pas une seule tâche. En outre, les gens semblent préoccupés par JS perf, puis utilisez une API au-dessus de JS pour faire les choses facilement (et éventuellement plus rapidement) sans l'API.
Grant Wagner
1
@Grant Bien que je rêve que jQuery devienne du code natif dans les navigateurs.
Dan Blows
3
@Blowski: c'est mon cauchemar! jQuery contient beaucoup de code «fais ce que je veux dire» extrêmement complexe et fragile qu'il serait complètement inapproprié de mettre dans une API officielle.
bobince
1
@bobince: Clairement, vous devez toujours remplacer tout Javascript par jQuery. C'est comme du bacon; il n'y a pas de situation dans laquelle moins c'est mieux. ;)
MW.
2
L'OP avait déjà window.parent.document, donc cela ne répondait à rien. Et imaginez que la logique du sélecteur est beaucoup plus complexe que l'ID d'un élément, une situation dans laquelle jQuery est sacrément pratique. J'ai l'impression que la question est "comment dire" bonjour "en français?" et cette réponse est "parler allemand".
grantwparks
13

Si vous devez trouver l'instance jQuery dans le document parent (par exemple, pour appeler une fonction utilitaire fournie par un plug-in), utilisez l'une de ces syntaxes:

  • window.parent.$
  • window.parent.jQuery

Exemple:

window.parent.$.modal.close();

jQuery est attaché à l' windowobjet et c'est ce qui window.parentest.

Álvaro González
la source
J'utilise mon iframe comme un contrôle utilisateur. Cela me permet de le garder agréable et propre.
Dan Randolph du
11

Vous pouvez accéder aux éléments de la fenêtre parent à partir d'un iframe en utilisant window.parentcomme ceci:

// using jquery    
window.parent.$("#element_id");

C'est la même chose que:

// pure javascript
window.parent.document.getElementById("element_id");

Et si vous avez plusieurs iframes imbriqués et que vous souhaitez accéder à l'iframe le plus haut, vous pouvez utiliser window.topcomme ceci:

// using jquery
window.top.$("#element_id");

C'est la même chose que:

// pure javascript
window.top.document.getElementById("element_id");
Amr
la source
7

dans la fenêtre parente:

<script>
function ifDoneChildFrame(val)
{
   $('#parentPrice').html(val);
}
</script>

et dans le fichier src iframe mis:

<script>window.parent.ifDoneChildFrame('Your value here');</script>
stieven
la source
5

ouais ça marche aussi pour moi.

Remarque: nous devons utiliser window.parent.document

    $("button", window.parent.document).click(function()
    {
        alert("Functionality defined by def");
    });
Yogesh Gandhi
la source
5

Cela fonctionne pour moi avec une petite touche. Dans mon cas, je dois remplir la valeur de POPUP JS au formulaire PARENT WINDOW.

J'ai donc utilisé $('#ee_id',window.opener.document).val(eeID);

Excellent!!!

Hitesh Patel
la source
3

Peut-être un peu tard pour le jeu ici, mais je viens de découvrir ce fantastique plugin jQuery https://github.com/mkdynamic/jquery-popupwindow . Il utilise essentiellement un événement de rappel onUnload, il écoute donc essentiellement la fermeture de la fenêtre enfant et effectuera toutes les tâches nécessaires à ce stade. Il n'y a donc vraiment pas besoin d'écrire de JS dans la fenêtre enfant pour revenir au parent.

cj5
la source
1

Il existe plusieurs façons de procéder.

I) Obtenez directement le parent principal.

pour exa. je veux remplacer ma page enfant par iframe alors

var link = '<%=Page.ResolveUrl("~/Home/SubscribeReport")%>';
top.location.replace(link);

ici top.location obtient le parent directement.

II) obtenir un parent un par un,

var element = $('.iframe:visible', window.parent.document);

ici si vous avez plus d'un iframe, spécifiez un actif ou visible.

vous pouvez également faire comme ceux-ci pour obtenir d'autres parents,

var masterParent = element.parent().parent().parent()

III) obtenir le parent par l'identifiant.

var myWindow = window.top.$("#Identifier")
Bharat
la source