关于iframe:iframe相互调用详解

49次阅读

共计 3347 个字符,预计需要花费 9 分钟才能阅读完成。

嵌入 iframe 机制,不可避免的要用到各个 iframe 页面之间办法和属性的互相调用。

这里设定有 3 个页面,一个父页面 main.html,它嵌入了两个 iframe,别离是:childPage1.html 和 childPage2.html

main.html 有一个函数叫 parentFunc()。main.html 代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <script type="text/javascript"
    function parentFunc(){// 代码段}
    </script>
    <body>
        <IFRAME scrolling="no" frameBorder=0 id=frmchild1 name=frmchild1 height="400"
        src="childPage1.html" width="100%" allowTransparency="true"></IFRAME>

        <IFRAME scrolling="no" frameBorder=0 id=frmchild2 name=frmchild2 height="400"
        src="childPage2.html" width="100%" allowTransparency="true"></IFRAME>
    </body>
</html>

子页 childPage1.html 中有函数 childFunc1()。代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <script type="text/javascript"
    function childFunc1(){// 代码段}
    </script>
    <body>
    </body>
</html>

子页 childPage2.html 中有函数 childFunc2()。代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <script type="text/javascript"
    function childFunc2(){// 代码段}
    </script>
    <body>
    </body>
</html>
子页调父页办法

如果子页 childPage1.html 要调用父页 main.html 中的 parentFunc() 办法,那么应该在 childPage1.html 中写如下代码:

parent.parentFunc()

或者用

top.parentFunc()

parent 找上一级,top 找最上一级。因为 childPage1.html 属于二级,所以 parent 和 top 作用一样。如果 childPage1.html 又嵌了一个 grandchildrenPage.html 的 iframe,想要调用 main.html 中的 parentFunc() 办法,则应该

parent.parent.parentFunc()

或者用

top.parentFunc()
两个子页办法互调

如果 childPage1.html 要调用 childPage2.html 中的办法 childFunc2(),则应该在 childPage1.html 中写如下代码:

parent.frmchild2.parentFunc()

或者用

top.frmchild2.parentFunc()

frmchild2 是 main.html 中引入第二个 iframe 时的 id。同理,childPage2.html 要调用 childPage1.html 中的办法 childFunc1(),则应该在 childPage2.html 中写如下代码:

parent.frmchild1.parentFunc()

或者用

top.frmchild1.parentFunc()
子页获得父页的节点对象及属性

在 main.html 中有一个按钮:

<input type="button" onclick="testFunc()" value="aaa" id="parentBtn"/>

子页 childPage1.html 要获得该按钮的 value,则应在 childPage1.html 中写如下代码:

parent.document.getElementById("parentBtn").value;

或者用

top.document.getElementById("parentBtn").value;
两个子页互取节点

例如子页 childPage1.html 中有一个按钮,如下:

<input type="button" value="11" id="btn"/>

如果 childPage2.html 要调用 childPage1.html 中按钮的 value,则应该在 childPage2.html 中写如下代码:

parent.frmchild1.document.getElementById("btn").value;

或者用

top.frmchild1.document.getElementById("btn").value;
父页调用子页办法

如果 main.html 要调用子页 childPage1.html 中的办法 childFunc1(),应在 main.html 中写如下代码:

document.getElementById("frmchild1").contentWindow.childFunc1()

frmchild1 是 main.html 中引入第一个 iframe 时的 id。留神:可能网上流传着其余的做法,但大多不兼容。有的只能在 IE 失效,有的只能在 FireFox 下失效。所以要以此为准。

父页获得子页节点对象及其属性

例如子页 childPage1.html 中有一个按钮,如下:

<input type="button" value="11" id="btn"/>

main.html 要获得或更改子页 childPage1.html 的按钮的 value 值,那么应该用如下代码:

document.getElementById("frmrightChild").contentWindow.document.getElementById('btn').value;

再例如要获得子页 childPage1.html 的内容高度,能够从 body 节点的 scrollHeight 取得。

document.getElementById("frmrightChild").contentWindow.document.body.scrollHeight;

但要留神须要在 iframe 页面 onload 后能力取到其节点。所以残缺的做法是 main.html 在引入 childPage1.html 加上 onload 函数,如下:

<IFRAME scrolling="no" frameBorder=0 id=frmchild1 name=frmchild1 height="400"
src="childPage1.html" onload="getChildHeight()" width="100%" allowTransparency="true"></IFRAME>

getChildHeight() 函数如下:

function getChildHeight(){var frm=document.getElementById("frmchild1");
    var childHeight;
    childHeight=frm.contentWindow.document.body.scrollHeight+"px";
}

正文完
 0