iframe中子父类窗口调用JS的方法及注意事项_ng 设置允许iframe触发js(1)

上,这里有个问题就是父窗口打开子窗口加载所有权限后根本无法把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>
```

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").οnclick=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();
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值