代码之家  ›  专栏  ›  技术社区  ›  Tim Banks

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

  •  4
  • Tim Banks  · 技术社区  · 16 年前

    我目前有一个页面结构,它由一个包含iframe(iframe0)的页面(父级)组成,在该iframe中我有另一个iframe(iframe1)。在iframe1中,我有一个javascript函数,我正试图从父级调用它。在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函数吗?

    谢谢。

    更新: 在进一步研究这个问题之后,我发现我正在处理的问题与我所要求的无关。伊勒布雷在下面给出的答案回答了我提出的问题,在那里,威尔把我标记为答案。我可能会开始另一个更详细地描述我的问题的问题。

    2 回复  |  直到 8 年前
        1
  •  10
  •   Marcel Korpel    14 年前

    我提供了一个使用3个HTML文件的示例。最外层是test.html,其中的iframe包含iframe1.html。反过来,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>
    
        2
  •  0
  •   frodo2975    8 年前

    选择iframe的一个快速方法是在dom资源管理器中选择它,然后在js控制台中运行 $0.contentWindow.myFunction()