让iFrame中的JS从主页中的元素中获取值

时间:2009-09-16 16:17:21

标签: javascript

这应该是一个简单的,但我有麻烦。我有一个加载.aspx页面的iframe。这个.aspx页面(iframe中的一个)有javascript,我可以尝试访问主页面上的元素,但它似乎永远无法找到它。

即:

这是加载iFrame的.aspx页面。

<body>
    <form id="form1" runat="server">
        <div>
            <iframe src="myframe.aspx" onload="DoIt();" width="100px" height="100%"></iframe>
            <div id='dvT'>hello</div>    
        </div>
    </form>
</body>

这是iFrame上的JS:

<script language="javascript" type="text/javascript">

    function DoIt() {
        alert(parent.document.getElementById('dvT').innerHTML);
    }

</script>

我已经尝试过parent.document,this.document,this.contentWindow.document等。

JS必须保留在iFrame中加载的页面上。 任何帮助表示赞赏: - )


这是解决方案

1。)给iFrame一个ID 2.)通过iframeid.methodName引用onload for iFrame中的脚本 3.)在其他页面的js上,参考this.parent.document ....

这是固定代码

<body>
        <form id="form1" runat="server">
            <div>
                <iframe src="myframe.aspx" onload="myFrame1234.DoIt();" width="100px" height="100%" id="myFrame1234"></iframe>
                <div id='dvT'>hello</div>    
            </div>
        </form>
    </body>

<!--- SCRIPT ON myframe.aspx page --->
<script language="javascript" type="text/javascript">

    function DoIt() {
        alert(this.parent.document.getElementById('dvT').innerHTML);
    }

</script>

2 个答案:

答案 0 :(得分:1)

你在看什么?当我尝试这个(两个页面都是纯HTML,而不是ASPX)时没有发生任何事情,因为在iframe标签onload事件中调用“DoIt()”并不是指内部框架中的DoIt()函数(但是在父级中寻找DoIt()方法。解决方案:更改 iframe src="myframe.aspx" onload="DoIt();"iframe src="myframe.aspx" onload="contentWindow.DoIt();"

答案 1 :(得分:0)

您可能需要使用parent.parentwindow.top向上走树 - 因为您的iframe来自同一台服务器,安全模型应该允许您这样做。