iframe中子父類窗口調(diào)用JS的方法及注意事項(xiàng)
一、前言
我頁(yè)面用的是EasyUI的彈出窗口里面嵌入一個(gè)iframe。
第一:父窗口打開(kāi)子窗口是一個(gè)新增用戶信息的iframe子頁(yè)面,點(diǎn)擊保存后,子窗口iframe則去調(diào)用父窗口的function closeAddWindow()方法,讓父窗口去關(guān)閉新增頁(yè)面;
第二:父窗口打開(kāi)一個(gè)設(shè)置用戶權(quán)限的iframe子窗口,首先打開(kāi)這個(gè)子窗口會(huì)全部加載數(shù)據(jù)庫(kù)表中所有的存在的權(quán)限,然后子窗口需要把加載的權(quán)限信息拼接html Append到一個(gè)ID為<table id="tb"></table>上,這里有個(gè)問(wèn)題就是父窗口打開(kāi)子窗口加載所有權(quán)限后根本無(wú)法把html 追加到id="tb"的表格上,這個(gè)原因很簡(jiǎn)單,因?yàn)楦复翱谡{(diào)用子窗口加載所有權(quán)限信息的后,沒(méi)有找到表格元素,因?yàn)樽禹?yè)面還沒(méi)有完全加載完成,這種情況處理在這里也介紹了,給iframe注冊(cè)一個(gè)onload事件,等加載完成后再去調(diào)用追加的方法。
好了,簡(jiǎn)單到這里,讓我們瞧瞧更多的事例吧!!~~~~~~(*^__^*) 嘻嘻……
二、iframe子父窗口方法調(diào)用
2.1語(yǔ)法使用
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語(yǔ)法代碼
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ò)誤提示", "請(qǐng)選中一行數(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 + "' 這里通過(guò)拼接參數(shù)iframe的src, //然后通過(guò)子窗口 parent.document.getElementById("iframe").getAttribute("src");//獲取父窗體iframe的src 發(fā)現(xiàn)根據(jù)獲取不到UserID的值,為null,也是因?yàn)榧虞d順序先后的問(wèn)題,導(dǎo)致我要用給iframe注冊(cè)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過(guò)去給子窗口的方法,給用戶擁有的角色設(shè)置checkbox選中 }; } $('#divRoleUsers').window('open'); } </script>
四、總結(jié)幾個(gè)關(guān)鍵點(diǎn)吧
父子窗口方法的調(diào)用,注意加載的先后順序才能獲取到想要的結(jié)果,遇到問(wèn)題常用alter()測(cè)試或者瀏覽器的開(kāi)發(fā)者工具監(jiān)控
以上內(nèi)容就是本文中介紹iframe中子父類窗口調(diào)用JS的方法及注意事項(xiàng),希望大家喜歡。
- 原生js獲取iframe中dom元素--父子頁(yè)面相互獲取對(duì)方dom元素的方法
- jquery、js調(diào)用iframe父窗口與子窗口元素的方法整理
- iframe子父頁(yè)面調(diào)用js函數(shù)示例
- js與jQuery 獲取父窗、子窗的iframe
- JS中Iframe之間傳值及子頁(yè)面與父頁(yè)面應(yīng)用
- iframe子頁(yè)面與父頁(yè)面在同域或不同域下的js通信
- 使用jquery/js獲取iframe父子級(jí)、同級(jí)獲取元素的方法
- 嵌入式iframe子頁(yè)面與父頁(yè)面js通信的方法
- 利用JS對(duì)iframe父子(內(nèi)外)頁(yè)面進(jìn)行操作的方法教程
相關(guān)文章
JavaScript使用canvas實(shí)現(xiàn)flappy bird全流程詳解
這篇文章主要介紹了JavaScript使用canvas實(shí)現(xiàn)flappy bird流程,canvas是HTML5提供的一種新標(biāo)簽,它可以支持JavaScript在上面繪畫(huà),控制每一個(gè)像素,它經(jīng)常被用來(lái)制作小游戲,接下來(lái)我將用它來(lái)模仿制作一款叫flappy bird的小游戲2023-03-03javascript獲取隱藏元素(display:none)的高度和寬度的方法
這篇文章主要介紹了javascript獲取隱藏元素(display:none)的高度和寬度的方法,實(shí)現(xiàn)方法比較復(fù)雜,需要的朋友可以參考下2014-06-06利用JQuery和JS實(shí)現(xiàn)奇偶行背景顏色自定義效果
本文將詳細(xì)介紹利用JQuery和JS實(shí)現(xiàn)奇偶行背景顏色自定義效果,需要的朋友可以參考下2012-11-11如何在uniapp項(xiàng)目中嵌套H5 頁(yè)面
在UniApp中可以通過(guò)使用 web-view 組件來(lái)嵌入H5頁(yè)面,大概思路是在該頁(yè)面的template部分添加web-view組件,設(shè)置src屬性為所需嵌入的H5頁(yè)面地址,感興趣的朋友跟隨小編一起看看吧2024-02-02Echarts地圖添加引導(dǎo)線效果(labelLine)
這篇文章主要介紹了Echarts地圖添加引導(dǎo)線效果(labelLine),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09手機(jī)端實(shí)現(xiàn)Bootstrap簡(jiǎn)單圖片輪播效果
這篇文章主要為大家詳細(xì)介紹了基于Bootstrap的簡(jiǎn)單輪播圖的手機(jī)實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10實(shí)用Javascript調(diào)試技巧分享(小結(jié))
這篇文章主要介紹了實(shí)用Javascript調(diào)試技巧分享(小結(jié)),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-06-06JavaScript數(shù)字和字符串轉(zhuǎn)換示例
這篇文章主要介紹了JavaScript數(shù)字和字符串轉(zhuǎn)換的應(yīng)用,需要的朋友可以參考下2014-03-03js+html5實(shí)現(xiàn)頁(yè)面可刷新的倒計(jì)時(shí)效果
這篇文章主要為大家詳細(xì)介紹了js+html5實(shí)現(xiàn)頁(yè)面可刷新的倒計(jì)時(shí)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07JavaScript綁定事件監(jiān)聽(tīng)函數(shù)的通用方法
這篇文章主要為大家詳細(xì)介紹了JavaScript綁定事件監(jiān)聽(tīng)函數(shù)的通用方法,感興趣的朋友可以參考一下2016-05-05