Iframe父页面与子页面之间的调用

原文:Iframe父页面与子页面之间的调用

Iframe父页面与子页面之间的调用

专业词语解释如下

    Iframe:iframe元素是文档中的文档。

    window对象: 浏览器会在其打开一个HTML文档时创建一个对应的window对象。但是,如果一个文档定义了一个或者多个框架(即:包含一个或者多个frame或者iframe标签),浏览器就会为原始文档创建一个window对象,再为每个iframe创建额外的window对象,这些额外的window对象是原始窗口的子窗口。

contentWindow: 是指指定的iframe或者iframe所在的window对象。

如果想要学习 "iframe之间的通信问题及iframe高度自适应",请看这边文章:

iframe之间的通信问题及iframe高度自适应

父页面与子页面之间的调用。

现在我们可以慢慢做demo来分别讲解下,假如有iframe父页面为 iframe1.html, 父页面上有2个子页面 分别为iframe2.html 和 iframe3.html。

父页面iframe1.html代码如下:

<!doctype html>
<html lang="en">
 <head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script src="jquery1.7.js"></script>
 </head>
 <body>
    <iframe src="http://localhost/iframe/iframe3.html" id = "iframe3"></iframe>
    <iframe src="http://localhost/iframe/iframe2.html" id = "iframe2"></iframe>
    <div class="iframe1">父页面</div>
   <script>
	function test2() {
	    console.log(1);
	}
   </script>
</body>
</html>

子页面iframe2.html代码如下:

<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <title>Document</title>
  <script src="jquery1.7.js"></script>
 </head>
 <body>
	<div id="test">aaa</div>
	<div class="iframe2">子页面</div>
       <script>
           function b() {
	       console.log("我是子页面");
	   }
	   function iframe3Page() {
	       console.log("iframe3页面调用iframe2页面");
	   }
      </script>
</body>
</html>

1.  子页面iframe2.html调用父页面 iframe1.html的元素如下代码:

console.log($('.iframe1',parent.document));

2. 子页面iframe2.html调用父页面iframe1.html的函数如下代码:

 parent.test2();

注意:父页面iframe1.html页面 中test2方法不能放在$(function(){}), 放在里面就调用不到。

3.     子页面iframe2.html调用自身的iframe(假如父页面有很多iframe,获取自身iframe不通过id或者name属性).

       1.  首先我们可以在父页面上写一个函数 用来获取页面所有的iframe,之后进行遍历,进行判断当前的window对象是否相同。如下代码:

 function getFrame(f){
        var frames = document.getElementsByTagName("iframe");

         for(i=0;i<frames.length;i++){

                if(frames[i].contentWindow == f){

                     return(frames[i])

                 }

           }

  }

    2. 在子页面iframe2.html中如下调用父页面的方法 getFrame.

       /* 获取自身的iframe */

var aa = parent.getFrame(this);
 console.log(aa);
$(aa).attr("flag",true);

  给iframe2设置属性 flag: true, 如下截图:

  

4.  父页面iframe1.html调用子页面 iframe2.html的元素及函数

    如下调用有误的:

console.log(document.getElementById("iframe2").contentWindow.b());

    因为iframe2.html 有可能未加载完成,所以要等iframe2加载完成后再进行调用,所以我们需要 iframe2.onload = function(){}; 这样再进行调用。为了兼容IE,我们可以如下封装一个方法:

function iframeIsLoad(iframe,callback){

        if(iframe.attachEvent) {   

               iframe.attachEvent('onload',function(){

                     callback && callback();

               });

         }else {

                 iframe.onload = function(){

                      callback && callback();

                 }

         }

   }

调用方式如下

// 父页面调用子页面iframe2的方法

var iframe2 = document.getElementById("iframe2");

iframeIsLoad(iframe2,function(){

       iframe2.contentWindow.b();   // 打印出 我是子页面    

       // 父页面获取子页面iframe2的元素

       var iframeDom = $(".iframe2",iframe2.contentWindow.document);

       console.log(iframeDom);

});
时间: 2024-11-08 23:21:14

Iframe父页面与子页面之间的调用的相关文章

iframe 父窗口和子窗口相互的调用方法集锦_javascript技巧

一.父窗口调用iframe子窗口方法 1.HTML语法:<iframe name="myFrame" src="child.html"></iframe> 2.父窗口调用子窗口:myFrame.window.functionName(); 3.子窗品调用父窗口:parent.functionName(); 简单地说,也就是在子窗口中调用的变量或函数前加个parent.就行 4.父窗口页面源码: 复制代码 代码如下: <html>

jQuery实现iframe父窗体和子窗体的相互调用_jquery

本文实例讲述了jQuery实现iframe父窗体和子窗体的相互调用方法.分享给大家供大家参考,具体如下: 父窗体 <html> <head> <title>usually function</title> </head> <body> <iframe src="http://www.baidu.com" ></iframe> <iframe src="myifame.html

javascript iframe 父窗口和子窗口实现代码

一.父窗口调用iframe子窗口方法 1.html语法:<iframe name="myframe" src="child.html"></iframe> 2.父窗口调用子窗口:myframe.window.functionname(); 3.子窗品调用父窗口:parent.functionname(); 简单地说,也就是在子窗口中调用的变量或函数前加个parent.就行 4.父窗口页面源码: 复制代码 代码如下: <html>

iframe父页面获取子页面参数的方法

 这篇文章主要介绍了iframe父页面获取子页面参数的方法,需要的朋友可以参考下 1.父页面中的iframe  代码如下: <iframe name="parentPage"></iframe>    2.子页面中元素的属性   代码如下: <input type="text" id="date" data-dojo-type="dijit/form/DateTextBox" value=&quo

两个JSP页面父页面获取子页面内容的两种方法

 需求说明:两个JSP页面,父页面需要子页面的内容,但子页面是隐藏的,具体来说,子页面是一系列的模板,父页面要通过id来获取这些模板,不愿意通过<include>方式导入,因为如果模板过多,就导致整个父页面太大,加载缓慢,以下两个方案,不知有没有解决这个问题. 1.通过ajax方式 实现过程:通过ajax请求到子页面中,子页面获取参数id使用java和js变量的交互后,返回需要的模板信息 缺点:把js变量转换成java变量比较麻烦,需要使用form表单来提交,而且jsp中的java脚本是在服务

JS父页面与子页面相互传值方法

 这篇文章主要介绍了使用JS在父页面和子页面间相互传值方法,子页面可以是window.open弹出的,也可以是iframe框架中的页面,需要的朋友可以参考下 一.子页面是父页面通过window.open弹出的情况 子页面要向父页面传值,只要在document前面加window.opener即可.  如:  1.父页面代码:   <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equ

两个JSP页面父页面获取子页面内容的两种方法_JSP编程

需求说明:两个JSP页面,父页面需要子页面的内容,但子页面是隐藏的,具体来说,子页面是一系列的模板,父页面要通过id来获取这些模板,不愿意通过<include>方式导入,因为如果模板过多,就导致整个父页面太大,加载缓慢,以下两个方案,不知有没有解决这个问题. 1.通过ajax方式 实现过程:通过ajax请求到子页面中,子页面获取参数id使用java和js变量的交互后,返回需要的模板信息 缺点:把js变量转换成java变量比较麻烦,需要使用form表单来提交,而且jsp中的java脚本是在服务器

javascript-JS中父页面的调用子页面的子页面,有办法吗?

问题描述 JS中父页面的调用子页面的子页面,有办法吗? 我在一个页面调用这个方法(方法是子页面的子页面的)obj_frm["frm_"+CallID].ReceiveData(Data),报错对象不支持"ReceiveData"属性或方法.应该怎么修改呢? 解决方案 没有大神知道吗?T^T 解决方案二: 你的意思是说子页面全部都是frame? 那么直接一级级下去就行了啊 解决方案三: js 刷新子页面----------------------

js父页面与子页面不同时显示的方法_javascript技巧

本文实例讲述了js父页面与子页面不同时显示的方法,可实现打开一个页面后,父页面DISABLE,在子页面关闭后,父页面ENABLE.分享给大家供大家参考.具体方法如下: 复制代码 代码如下: function onNewClick() {     var url = "VesselScheduleNEW.aspx";     if (null!=newWin && newWin.closed) newWin=null;        if (null==newWin)