2010-09-11 3 views
0

J'ai une page html où j'ai cette disposition essentiellement:Comment appeler la fonction javascript à l'intérieur d'un iframe adjacent

<html> 
<body> 

<!-- iFrame A --> 
<iframe></iframe> 

<!-- iFrame B --> 
<iframe></iframe> 
</body> 
</html> 

En IFRAME « B », je voudrais appeler une fonction js dans IFRAME « A ", qui changera finalement la propriété window.location et redirigera la page. J'ai également à ma disposition des jquery, mais je n'ai pas réussi à trouver un moyen d'appeler quelque chose dans ce cadre adjacent.

Des suggestions?

+0

Les trois sont-ils tous sur le même domaine? Si non, quels sont sur chaque domaine, et que contrôlez-vous? –

+0

Oui, tous les trois sur le même domaine – mirezus

Répondre

0

Utilisez window.parent pour obtenir le parent (la fenêtre principale), puis utilisez window.frames sur la fenêtre parente pour obtenir l'image B. Appelez ici votre fonction.

+0

Dans certains navigateurs, le tableau window.frames n'est rempli que si les cadres sont nommés, plutôt que d'avoir seulement un ID – mplungjan

7

En supposant que tout est sur le même domaine, et vous avez deux iframes avec ids "iframe-un" et "iframe-b", avec jQuery dans le parent:

Dans la trame A:

function foo() { 
    alert("foo from frame A"); 
} 

du cadre b:

window.parent.$("#iframe-a")[0].contentWindow.foo(); 

Et vous devriez voir "foo du cadre A" Soyez alerté.

+1

pourquoi [0]? et pourquoi parent? fenêtre. $ ("# iframeA"). contentWindow.foo(); devrait être suffisant en supposant que id = "iframeA" puisque vous devriez toujours avoir des ID uniques – mplungjan

+0

Je ne sais pas pourquoi cela fonctionne, mais c'est le cas. Je vais devoir en faire un peu plus. Merci pour vos idées @bcherry – mirezus

+0

@mplungjan - Puisque nous sommes dans le cadre B, nous devons traverser jusqu'au parent avant de pouvoir interroger le cadre A, puisqu'il ne fait pas partie du DOM de B. Le '[0]' obtient le noeud DOM brut de l'objet jQuery, donc nous pouvons accéder 'contentWindow'. – bcherry

1

Dans certains navigateurs, le tableau window.frames n'est rempli que si les cadres sont nommés, plutôt que d'avoir seulement un ID Si les cadres sont nommés et que le contenu provient de la même origine (domaine, port, protocole), alors window.frameb.functionName() déclenchera la fonction en javascript standard. Voir les autres réponses pour jQuery version

Questions connexes