拥有iframe页面的子父类窗口调用JS的方法,并且注意的事项
一、前言
我页面用的是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的方法,并且注意的事项的更多相关文章
- [转python 父类可以调用子类的方法
问题描述:我也是在读500 Line 里满的DBDB 的代码时发现的,python的父类可以调用子类的方法,这跟平常习惯的理解方式很不一样,所以就查了下原因,记录如下: 1.现象:最近使用到了So ...
- Java 中父类怎么调用子类的方法?
父类能调用子类的方法吗? 答:能. 怎么做? ● 把子类传递到父类的有参构造中,然后调用. ● 使用反射的方式调用,你使用了反射还有谁不能调用的?! ● 父类调用子类的静态方法. 案例展示: pack ...
- 页面加载完毕后调用js方法进行布局操控 已实验
页面加载完毕后调用js方法进行布局操控 已实验 $(function(){ var check1 = $("[id$=SMS]").is(':checked'); var bl=$ ...
- js调用php和php调用js的方法举例
js调用php和php调用js的方法举例1 JS方式调用PHP文件并取得php中的值 举一个简单的例子来说明: 如在页面a.html中用下面这句调用: <script type="te ...
- iframe于iframe页面之间的函数相互调用
因为iframe页面于包括父页面在内的其他页面通讯有跨域问题,所以只有在服务器环境下或者火狐浏览器下才能测试. 在iframe页面调用父页面的函数采用parent,例子:在父页面有一个say()函数, ...
- JS调用PHP 和 PHP调用JS的方法举例
http://my.oschina.net/jiangchike/blog/220988 1.JS方式调用PHP文件并取得PHP中的值举一个简单的例子来说明:如在页面test_json1中用下面这句调 ...
- 【Android】java中调用JS的方法
最近因为学校换了新的教务系统,想做一个模拟登陆功能,发现登陆的账号和密码有一个js脚本来进行加密 整理了一下java中执行JS的方法 智强教务 账号 密码 加密方法 var keyStr = &quo ...
- html嵌套iframe怎样实现等iframe页面载入完进行下一步调用
</pre>假设想在你的html里面显示一张图片.或者显示一个报表,常常会在里面嵌套iframe,当我们点查询报表时.在报表显示过程中,我们想做个遮罩层,提示等待...可是报表显示出来后. ...
- js 子窗口调用父框框方法
父窗口 子窗口
随机推荐
- 1236 hdu排名
Problem Description 今天的上机考试虽然有实时的Ranklist,但上面的排名只是根据完成的题数排序,没有考虑 每题的分值,所以并不是最后的排名.给定录取分数线,请你写程序找出最后通 ...
- libtcmalloc 简单使用
下载地址: https://github.com/gperftools/gperftools这个编译很简单,直接进入vsprojects\libtcmalloc_minimal,用vc编译即可,整个过 ...
- 通过jqueryui实现邮件提示
//js代码$(function () { var availableTags = ["@qq.com", "@gmail.com", "@126.c ...
- 添加AdMob 错误记录
依照官方教程添加文件及其 frameWork后 发现运行报错 错误如下 Undefined symbols for architecture i386: "_OBJC_CLASS_$_ASI ...
- Android处理XML的三种方式
http://www.cnblogs.com/zhangdongzi/archive/2011/04/14/2016434.html http://blog.csdn.net/zzp16/articl ...
- WebApi 自定义过滤器实现支持AJAX跨域的请求
我想关于此类话题的文章,大家一搜铺天盖地都是,我写此文的目的,只是对自己学习过程的记录,能对需要的朋友有所帮助,也百感荣幸!!!废话不多说,直接上代码! 客户端:很简单的AJAX请求 <html ...
- VS2010的调试参数/Zi /DEBUG
/DEBUG只是是否要生成调试信息的开关.这个命令行选项在链接器页面那里 /Zi只是生成的调试信息的格式,这个格式是.pdb文件.当然还有好几种格式.这个命令行在编译页那里 如果上面的选项没有设置对, ...
- linux环境c++开发:ubuntu12.04使用llvm3.4.2
什么是 clang/llvm/libc++[1] clang 是最近几年(在大财主苹果的支持下)发展得非常好的 C 家族语言 (包括C/C++/Obj-C/Obj-C++) 编译器前端,所谓前端,就是 ...
- Smarty 变量使用
Smarty的标签都是使用定界符括起来. 默认定界符是{ 和 }, 但定界符可以被改变. 比如说在本手册,我们会假定你在使用默认的定界符. 在Smarty看来,任何在定界符之外的内容,都是静态的,或者 ...
- 画图工具Graphviz安装配置
Graphviz (英文:Graph Visualization Software的缩写)是一个由AT&T实验室启动的开源工具包,用于绘制DOT语言脚本描述的图形.它也提供了供其它软件使用的库 ...