2009-05-28 5 views
4

J'ai actuellement une structure de page qui consiste en une page (Parent) qui inclut un iframe (iframe0) et à l'intérieur de cette iframe j'ai une autre iframe (iframe1). Dans iframe1 j'ai une fonction javascript que j'essaye d'appeler de Parent. Dans Firefox/Chrome/Safari Je suis en mesure d'appeler cette fonction avec le code suivant:Accéder à une fonction javascript dans un iframe imbriqué dans IE

frames["iframe0"]["iframe1"].functionName(); 

Cependant, dans Internet Explorer le code ci-dessus ne fonctionne pas et renvoie l'erreur « Cet objet ne gère pas cette propriété ou méthode". J'ai essayé d'autres façons d'accéder à la méthode avec eux tous retournant la même erreur.

window.frames.iframe0[iframe1].functionName(); 
window.iframe0.iframe1.functionName(); 
window.frames.iframe0.frames.iframe1.functionName(); 

J'ai même essayé d'appeler une fonction dans iframe0 qui a appelé la fonction iframe1 et cela ne même pas travailler.

Quelqu'un at-il une idée sur la façon d'accéder à une fonction javascript qui est imbriquée dans un iframe de 2 niveaux de profondeur?

Merci. Après avoir examiné le problème plus en détail, j'ai constaté que le problème auquel je suis confronté n'est pas lié à ce que j'ai demandé. La réponse ylebre donnée ci-dessous répond à la question que j'ai posée, et là pour moi, je la marquerai comme la réponse. Je vais probablement commencer une autre question décrivant mon problème plus en détail.

Répondre

10

J'ai fourni un exemple en utilisant 3 fichiers HTML. Le plus à l'extérieur est test.html qui a un iframe contenant iframe1.html. À son tour, iframe1.html contient un iframe contenant iframe2.html. J'espère que c'est le genre de configuration que vous avez en tête.

Fondamentalement, vous pouvez appeler la fonction iframe en utilisant iframe.contentWindow.myfunc(); En utilisant contentWindow.document, vous pouvez ensuite accéder au iframe de second niveau en utilisant contentWindow.document.

La fonction exemple 'doit()' appelle une fonction dans le parent, le premier iframe et le second iframe.

Espérons que cela aide!

<!------- test.html --------> 
<html> 
<head> 
    <script type="text/javascript"> 
     function parent_function() { 
      alert('parent'); 
     } 
     function doit() { 
      parent_function(); 
      document.getElementsByTagName('iframe')[0].contentWindow.iframe1_function(); 
      document.getElementsByTagName('iframe')[0].contentWindow.document.getElementsByTagName('iframe')[0].contentWindow.iframe2_function(); 
     } 
    </script> 
</head> 
<body> 
main 
<a href="javascript:doit();">do it</a> 
<iframe src='iframe1.html'> 
</body> 
</html> 

<!------- iframe1.html --------> 
<html> 
<head> 
    <script type="text/javascript"> 
     function iframe1_function() { 
      alert('iframe1'); 
     } 
    </script> 
</head> 
<body> 
frame1 
<iframe src='iframe2.html'> 
</body> 
</html> 

<!------- iframe2.html --------> 
<html> 
<head> 
    <script type="text/javascript"> 
     function iframe2_function() { 
      alert('iframe2'); 
     } 
    </script> 
</head> 
<body> 
frame2 
</body> 
</html> 
0

Un moyen rapide pour sélectionner une iframe est de le sélectionner dans l'explorateur de dom, puis dans la console js, vous pouvez exécuter $0.contentWindow.myFunction()

Questions connexes