在IE中嵌套iframe中访问javascript函数

时间:2009-05-28 15:14:13

标签: javascript iframe

我目前有一个页面结构,其中包含一个包含iframe(iframe0)的页面(Parent),在iframe内部我有另一个iframe(iframe1)。在iframe1中我有一个javascript函数,我试图从Parent调用。在Firefox / Chrome / Safari中,我可以使用以下代码调用此函数:

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

但是,在Internet Explorer中,上述代码不起作用,并返回错误“对象不支持此属性或方法”。我已经尝试了一些其他方法来访问该方法,它们都返回相同的错误。

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

我甚至尝试在iframe0中调用一个函数来调用iframe1中的函数,但这个函数甚至都不起作用。

任何人都知道如何访问嵌套在2级深度的iframe中的javascript函数?

感谢。

更新 在进一步研究这个问题后,我发现我所处理的问题与我提出的问题无关。答案ylebre在下面回答了我问过的问题,并且我将在那里标记为答案。我可能会开始另一个更详细地描述我的问题的问题。

2 个答案:

答案 0 :(得分:10)

我提供了一个使用3个HTML文件的示例。最外层是test.html,它有一个包含iframe1.html的iframe。反过来,iframe1.html包含一个包含iframe2.html的iframe。我希望这是你想到的那种设置。

基本上,您可以使用iframe.contentWindow.myfunc();

调用iframe函数

使用contentWindow.document,您可以访问第二级iframe。

示例函数'doit()'调用父,第一个iframe和第二个iframe中的函数。

希望这有帮助!

<!------- 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>

答案 1 :(得分:0)

选择iframe的快捷方法是在dom explorer中选择它,然后在js控制台中,您可以运行$0.contentWindow.myFunction()