iframe中子父類窗口調(diào)用JS的方法及注意事項(xiàng)
一、前言
我頁面用的是EasyUI的彈出窗口里面嵌入一個(gè)iframe。
第一:父窗口打開子窗口是一個(gè)新增用戶信息的iframe子頁面,點(diǎn)擊保存后,子窗口iframe則去調(diào)用父窗口的function closeAddWindow()方法,讓父窗口去關(guān)閉新增頁面;
第二:父窗口打開一個(gè)設(shè)置用戶權(quán)限的iframe子窗口,首先打開這個(gè)子窗口會全部加載數(shù)據(jù)庫表中所有的存在的權(quán)限,然后子窗口需要把加載的權(quán)限信息拼接html Append到一個(gè)ID為<table id="tb"></table>上,這里有個(gè)問題就是父窗口打開子窗口加載所有權(quán)限后根本無法把html 追加到id="tb"的表格上,這個(gè)原因很簡單,因?yàn)楦复翱谡{(diào)用子窗口加載所有權(quán)限信息的后,沒有找到表格元素,因?yàn)樽禹撁孢€沒有完全加載完成,這種情況處理在這里也介紹了,給iframe注冊一個(gè)onload事件,等加載完成后再去調(diào)用追加的方法。
好了,簡單到這里,讓我們瞧瞧更多的事例吧?。~~~~~(*^__^*) 嘻嘻……
二、iframe子父窗口方法調(diào)用
2.1語法使用
1、父窗口嵌入iframe
<iframe id='myFrame' name="myFrame" src="FChild.html" width='100%' height='100%' frameborder='0'></iframe>
2、父窗口調(diào)用子窗口方法
myFrame.window.sonMethod();
3、子窗口調(diào)用父窗口方法
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>我是父窗口內(nèi)容</div>
<div><input type="button" id="btnFather" value="調(diào)用子窗口方法" /></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;"> 我是子窗體內(nèi)容</div>
<div > <input type="button" id="btnSon" value="調(diào)用父窗口方法" /></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="設(shè)置用戶角色" 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="設(shè)置用戶角色" /></div>
<script type="text/javascript">
$("#btn").click(function () {
showSetUserRoleWindow();
});
//設(shè)置用戶角色
function showSetUserRoleWindow() {
var getSelections = $("#tt").datagrid("getSelections");
if (getSelections.length > 1 || getSelections.length == 0) {
$.messager.alert("錯(cuò)誤提示", "請選中一行數(shù)據(jù)!", "error");
return false;
}
var data = getSelections[0]; //獲取選中的一行所有json的數(shù)據(jù)
//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>");
//錯(cuò)誤做法?。荷厦鎠rc='RoleUsers_Update.aspx?UserID=" + data.UserID + "' 這里通過拼接參數(shù)iframe的src,
//然后通過子窗口 parent.document.getElementById("iframe").getAttribute("src");//獲取父窗體iframe的src 發(fā)現(xiàn)根據(jù)獲取不到UserID的值,為null,也是因?yàn)榧虞d順序先后的問題,導(dǎo)致我要用給iframe注冊onload事件后才能獲取到我需要的結(jié)果
//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) { //這一步是必須的?。。?,因?yàn)椴患舆@一句下面onload綁定事件只執(zhí)行一次,我需要每次加載完iframe都調(diào)用一次子窗口的方法!
$("#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(); //調(diào)用子窗口iframe里面的方法加載所有的角色checkbox
myframe.window.loadUserRole(data.UserID); //接著傳遞用戶ID過去給子窗口的方法,給用戶擁有的角色設(shè)置checkbox選中
};
}
$('#divRoleUsers').window('open');
}
</script>
四、總結(jié)幾個(gè)關(guān)鍵點(diǎn)吧
父子窗口方法的調(diào)用,注意加載的先后順序才能獲取到想要的結(jié)果,遇到問題常用alter()測試或者瀏覽器的開發(fā)者工具監(jiān)控
以上內(nèi)容就是本文中介紹iframe中子父類窗口調(diào)用JS的方法及注意事項(xiàng),希望大家喜歡。
相關(guān)文章
js input輸入百分號保存數(shù)據(jù)庫失敗的解決方法
這篇文章主要介紹了js input輸入百分號保存數(shù)據(jù)庫失敗的解決方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-05-05
js實(shí)現(xiàn)圖片區(qū)域可點(diǎn)擊大小隨意改變(適用移動(dòng)端)代碼實(shí)例
這篇文章主要介紹了js實(shí)現(xiàn)圖片區(qū)域可點(diǎn)擊大小隨意改變(適用移動(dòng)端)代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09
js跨瀏覽器實(shí)現(xiàn)將字符串轉(zhuǎn)化為xml對象的方法
將字符串轉(zhuǎn)化為xml對象需要注意的是該死的ie多版本的問題,具體實(shí)現(xiàn)如下,感興趣的朋友不妨參考下本文,希望對大家有所幫助2013-09-09
原生javascript單例模式的應(yīng)用實(shí)例分析
這篇文章主要介紹了原生javascript單例模式的應(yīng)用,結(jié)合實(shí)例形式分析了JavaScript單例模式的基本功能、原理、應(yīng)用及操作注意事項(xiàng),需要的朋友可以參考下2020-02-02
javascript生成json數(shù)據(jù)簡單示例分享
這篇文章主要介紹了javascript生成json數(shù)據(jù)示例,需要的朋友可以參考下2014-02-02
TypeScript工具類 Partial 和 Required 的場景分析
這篇文章主要介紹了TypeScript工具類 Partial 和 Required 的詳細(xì)講解,本文通過場景描述給大家詳細(xì)講解工具類的使用,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-09-09
JS動(dòng)態(tài)創(chuàng)建Table,Tr,Td并賦值的具體實(shí)現(xiàn)
這篇文章介紹了JS動(dòng)態(tài)創(chuàng)建Table,Tr,Td并賦值的具體實(shí)現(xiàn),有需要的朋友可以參考一下2013-07-07

