如何从主框架获取对在iframe上创建的对象的引用

时间:2015-02-16 14:34:49

标签: javascript iframe

我有一个iframe,我需要使用那个iframe从主框架中运行的脚本创建一个新对象。问题是,当我以这种方式实例化一个对象时,它会返回undefined,所以我没有办法获取引用并操纵对象。

该示例显示了正在发生的事情:

//main.html
<html>
    <script>
        var iframe = document.getElementsByTagName("iframe")[0];

        //it gives back undef instead of the new object
        var foo = new iframe.contentWindow.Foo();
    </script>

    <iframe src="second.html"></iframe>
</html>

//second.html
<html>
    <script>

        window.Foo = function() {
            this.bar = "BAR";
        }

    </script>
</html>

我知道这是造成的,因为主框架和iframe的执行环境不同,但有没有办法获取iframe上创建的对象的引用?

我试图将变量放到iframe的全局范围内,希望它可以工作,但它仍未定义:

//main.html
<html>
    <script>
        var iframe = document.getElementsByTagName("iframe")[0];

        //I hoped this helps (because now the variable is on the same
        //global environment), but still undefined
        iframe.contentWindow.foo = new iframe.contentWindow.Foo();
    </script>

    <iframe src="second.html"></iframe>
</html>

//second.html
<html>
    <script>

        window.Foo = function() {
            this.bar = "BAR";
        }

    </script>
</html>

1 个答案:

答案 0 :(得分:0)

在主页面上,您可以定义页面名称:

<head>
    <script>  
    window.name = "home";
    var home = window;

    var NS_MAIN = {             
       init:function(){
          alert(home.SECOND.globalVal);
                }   

            };
    </script>
</head>
<body>

<iframe id="frame" src="secondPage.html" border="1" width="50%" height="50%"></iframe>  

你的第二页

 <head>
           <script>  

           var NS_SECOND = {    

                globalVal:null,

                init:function(){
                       home.SECOND= this;
                       NS_SECOND.globalVal="Hello";

                }   

            };
          </script>
      </head>
      <body>            


      </body>