一、前言

我页面用的是EasyUI的弹出窗口里面嵌入一个iframe。第一:父窗口打开子窗口是一个新增用户信息的iframe子页面,点击保存后,子窗口iframe则去调用父窗口的function closeAddWindow()方法,让父窗口去关闭新增页面;第二:父窗口打开一个设置用户权限的iframe子窗口,首先打开这个子窗口会全部加载数据库表中所有的存在的权限,然后子窗口需要把加载的权限信息拼接html  Append到一个ID为<table id="tb"></table>上,这里有个问题就是父窗口打开子窗口加载所有权限后根本无法把html 追加到id="tb"的表格上,这个原因很简单,因为父窗口调用子窗口加载所有权限信息的后,没有找到表格元素,因为子页面还没有完全加载完成,这种情况处理在这里也介绍了,给iframe注册一个onload事件,等加载完成后再去调用追加的方法。好了,简单到这里,让我们瞧瞧更多的事例吧!!~~~~~~(*^__^*) 嘻嘻……

二、iframe子父窗口方法调用

2.1语法使用

1、父窗口嵌入iframe   <iframe id='myFrame' name="myFrame" src="FChild.html" width='100%' height='100%' frameborder='0'></iframe>   (必须指定name="iframe名字"才起效果)

2、父窗口调用子窗口方法   myFrame.window.sonMethod();

3、子窗口调用父窗口方法    parent.fatherMethod();

4、兼容浏览器的iframe 加载完成方法

if (myFrame.attachEvent) {
            myFrame.attachEvent("onload", function () {
                alert("兼容IE加载的加载方法");
            });
        } else {
            myFrame.onload = function () {
                alert("兼容其他浏览器加载方法");
            };
        }

2.2语法代码

Father.html

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
</head>
<body>
    <div>我是父窗口内容</div>
    <div><input type="button" id="btnFather" value="调用子窗口方法" /></div>
    <br />
    <br />
    <br />
    <iframe id='myFrame' name="myFrame" src="FChild.html" width='100%' height='100%' frameborder='0'></iframe>
    <script type="text/javascript">

        document.getElementById("btnFather").onclick=function () {
            myFrame.window.sonMethod();
        }

        function fatherMethod() {
            alert("父窗口方法!");
        }

        if (myFrame.attachEvent) {
            myFrame.attachEvent("onload", function () {
                alert("兼容IE加载的加载方法");
            });
        } else {
            myFrame.onload = function () {
                alert("兼容其他浏览器加载方法");
            };
        }
    </script>
</body>
</html>

FChild.html

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
   <div style="border:1px solid red;"> 我是子窗体内容</div>
     <div > <input type="button" id="btnSon" value="调用父窗口方法" /></div>
     <script type="text/javascript">

         document.getElementById("btnSon").onclick = function () {
             parent.fatherMethod();
         }

         function sonMethod() {
             alert("子窗口方法!");
         }

    </script>
</body>
</html>

三、什么情况下使用到 myFrame.onload 或者 myFrame.attachEvent

这里使用的是easyui框架前端框架

  <div id="divRoleUsers" title="设置用户角色" class="easyui-window" closed="true" collapsible="false" minimizable="false" maximizable="false"  style="width: 140px; height: 250px; padding: 5px;">
     </div>
 <div > <input type="button" id="btn" value="设置用户角色" /></div> 


 <script type="text/javascript">

 $("#btn").click(function () {
showSetUserRoleWindow();
});

        //设置用户角色
        function showSetUserRoleWindow() {

            var getSelections = $("#tt").datagrid("getSelections");
            if (getSelections.length > 1 || getSelections.length == 0) {
                $.messager.alert("错误提示", "请选中一行数据!", "error");
                return false;
            }

            var data = getSelections[0]; //获取选中的一行所有json的数据

            //if ($("#divRoleUsers #iframe").length != 0) {
            //    $("#divRoleUsers #iframe").remove();
            //}

            //   $('#divRoleUsers').append("<iframe id='iframe' name='iframe' src='RoleUsers_Update.aspx?UserID=" + data.UserID + "'  width='100%' height='100%'  frameborder='0'></iframe>");

            //错误做法!:上面src='RoleUsers_Update.aspx?UserID=" + data.UserID + "'     这里通过拼接参数iframe的src,
            //然后通过子窗口 parent.document.getElementById("iframe").getAttribute("src");//获取父窗体iframe的src  发现根据获取不到UserID的值,为null,也是因为加载顺序先后的问题,导致我要用给iframe注册onload事件后才能获取到我需要的结果

            //if (myframe.attachEvent) {
            //    myframe.attachEvent("onload", function () {
            //        alert("Local iframe is now loaded.");
            //        myframe.window.loadAllRole();
            //    });
            //} else {
            //    myframe.onload = function () {
            //        alert("Local iframe is now loaded.");
            //        myframe.window.loadAllRole();
            //    };
            //}

            if ($("#divRoleUsers #myframe").length != 0) {      //这一步是必须的!!!,因为不加这一句下面onload绑定事件只执行一次,我需要每次加载完iframe都调用一次子窗口的方法!
                $("#divRoleUsers #myframe").remove();
            }

            $('#divRoleUsers').append("<iframe id='myframe' name='myframe' src='RoleUsers_Update.aspx'  width='100%' height='100%'  frameborder='0'></iframe>");

            if (myframe.attachEvent) {
                myframe.attachEvent("onload", function () {
                    myframe.window.loadAllRole();
                    myframe.window.loadUserRole(data.UserID);
                });
            } else {
                myframe.onload = function () {
                    myframe.window.loadAllRole();         //调用子窗口iframe里面的方法加载所有的角色checkbox
                    myframe.window.loadUserRole(data.UserID);      //接着传递用户ID过去给子窗口的方法,给用户拥有的角色设置checkbox选中
                };
            }

            $('#divRoleUsers').window('open');
        }

    </script>

四、总结几个关键点吧

父子窗口方法的调用,注意加载的先后顺序才能获取到想要的结果,遇到问题常用alter()测试或者浏览器的开发者工具监控

拥有iframe页面的子父类窗口调用JS的方法,并且注意的事项的更多相关文章

  1. [转python 父类可以调用子类的方法

    问题描述:我也是在读500 Line 里满的DBDB 的代码时发现的,python的父类可以调用子类的方法,这跟平常习惯的理解方式很不一样,所以就查了下原因,记录如下:   1.现象:最近使用到了So ...

  2. Java 中父类怎么调用子类的方法?

    父类能调用子类的方法吗? 答:能. 怎么做? ● 把子类传递到父类的有参构造中,然后调用. ● 使用反射的方式调用,你使用了反射还有谁不能调用的?! ● 父类调用子类的静态方法. 案例展示: pack ...

  3. 页面加载完毕后调用js方法进行布局操控 已实验

    页面加载完毕后调用js方法进行布局操控 已实验 $(function(){ var check1 = $("[id$=SMS]").is(':checked'); var bl=$ ...

  4. js调用php和php调用js的方法举例

    js调用php和php调用js的方法举例1 JS方式调用PHP文件并取得php中的值 举一个简单的例子来说明: 如在页面a.html中用下面这句调用: <script type="te ...

  5. iframe于iframe页面之间的函数相互调用

    因为iframe页面于包括父页面在内的其他页面通讯有跨域问题,所以只有在服务器环境下或者火狐浏览器下才能测试. 在iframe页面调用父页面的函数采用parent,例子:在父页面有一个say()函数, ...

  6. JS调用PHP 和 PHP调用JS的方法举例

    http://my.oschina.net/jiangchike/blog/220988 1.JS方式调用PHP文件并取得PHP中的值举一个简单的例子来说明:如在页面test_json1中用下面这句调 ...

  7. 【Android】java中调用JS的方法

    最近因为学校换了新的教务系统,想做一个模拟登陆功能,发现登陆的账号和密码有一个js脚本来进行加密 整理了一下java中执行JS的方法 智强教务 账号 密码 加密方法 var keyStr = &quo ...

  8. html嵌套iframe怎样实现等iframe页面载入完进行下一步调用

    </pre>假设想在你的html里面显示一张图片.或者显示一个报表,常常会在里面嵌套iframe,当我们点查询报表时.在报表显示过程中,我们想做个遮罩层,提示等待...可是报表显示出来后. ...

  9. js 子窗口调用父框框方法

    父窗口 子窗口

随机推荐

  1. iOS 无限轮播图的两种实现

    首先说一下实现的思想: 用UIScrollView实现,在scrollView上添加3个UIImageView,分别用来显示上一张图片,当前显示的图片,下一张图片.scrollView在不滑动的时候永 ...

  2. BZOJ 3926 && ZJOI 2015 诸神眷顾的幻想乡 (广义后缀自动机)

    3926: [Zjoi2015]诸神眷顾的幻想乡 Time Limit: 10 Sec Memory Limit: 512 MB Description 幽香是全幻想乡里最受人欢迎的萌妹子,这天,是幽 ...

  3. 慕课linux学习笔记(八)常用命令(5)

    解压缩命令 常用压缩格式 .zip .gz .bz2 .tar.gz .tar.bz2 zip [压缩文件名] [ 原文件 ] #压缩文件 -r [压缩文件名] [ 源目录] #压缩目录 -r [压缩 ...

  4. EL表达式复习

    EL表达式格式: 格式1:${objName.attribute} 执行的过程为:从pageContext.request.session.application中依次查找绑定名为“user”的对象, ...

  5. 布尔值(Boolean values)

    布尔值是特殊的整数. 尽管布尔值由常量 True 和 False 来表示, 如果将布尔值放到一 个数值上下文环境中(比方将 True 与一个数字相加), True 会被当成整数值 1, 而 False ...

  6. Maven+SpringMVC+Mybatis 开发环境整合

    1.maven build遇到了如下问题:  [ERROR] Failed to execute goal org.codehaus.mojo:tomcat-maven-plugin:1.1:rede ...

  7. VMware网络配置 实现与物理机互访

    虚拟机和物理主机互访,两台机器可以互访并可以被局域网内其他机器访问,可以ping通并可以访问网站. 这几天正好有空搞个虚拟机,并装了不同系统,以备不同部署环境需要.明明是搞编程的,却不得不学各种知识, ...

  8. LeetCode_Surrounded Regions

    Given a 2D board containing 'X' and 'O', capture all regions surrounded by 'X'. A region is captured ...

  9. 《Programming WPF》翻译 第7章 2.图形

    原文:<Programming WPF>翻译 第7章 2.图形 图形时绘图的基础,代表用户界面树的元素.WPF支持多种不同的形状,并为它们每一个都提供了元素类型. 7.2.1基本图形类 在 ...

  10. 《Programming WPF》翻译 第5章 8.我们进行到哪里了?

    原文:<Programming WPF>翻译 第5章 8.我们进行到哪里了? 样式支持你定义一个策略来设置可视化元素的依赖属性.属性的设置可以被命名以及手动或者编程方式地通过名称应用,或者 ...