国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 語(yǔ)言 > JavaScript > 正文

如何實(shí)現(xiàn)iframe父子傳參通信

2024-05-06 15:44:06
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

在最近的項(xiàng)目里面,用到了不少關(guān)于iframe父子傳參通信的相關(guān)操作,記錄一下,雖然很簡(jiǎn)單,但是確實(shí)十分有用的;

iframe通信可以分為2種,跨域和非跨域兩種.分別說(shuō)明;

有一點(diǎn)很重要,iframe是可以給name 屬性的;給上name 屬性可以省下一些代碼;

非跨域 父調(diào)子

//父頁(yè)面<button class="b" id="b">點(diǎn)擊</button><iframe src="a.html" name='child' id="f"></iframe><script>  var ob=document.getElementById('b');  var msg='hellow,i'm your father!!'  ob.onclick=function(){    if(child.document.readyState=="complete"){      child.window.fnChild(msg); //關(guān)鍵    }  }</script>//子頁(yè)面<script>function fnChild (arg) {  console.log(arg); //確實(shí)得到了 hellow,i'm your father!!}</script>

父頁(yè)面調(diào)用子頁(yè)面使用 childFrameName.window.fnName();;當(dāng)然有一點(diǎn)很重要,你需要判斷iframe 里面的東西是否加載完成,如果加載未完成就調(diào)用的話是會(huì)報(bào)錯(cuò)的;
判斷iframe 加載是否完成有2種方法
1,childFrameName.document.readyState=="complete"來(lái)判斷;
2,childFrameName.onload=function(){} 使用onload 回調(diào)函數(shù),把調(diào)用的方法都寫(xiě)在這個(gè)回調(diào)函數(shù)里面;

非跨域 子調(diào)父

//在父頁(yè)面<div id="a" class="a"></div><iframe src="a.html" name='child' id="f"></iframe><script>  function changeColor(){    var oDiv=document.getElementById('a');    oDiv.style.backgroundColor="red";  }</script>//在子頁(yè)面<button class="ob" onclick="c()">anniu</button><script>  function c(){    parent.window.changeColor(); //關(guān)鍵  }</script>

同樣的,在子頁(yè)面調(diào)用父頁(yè)面的方法使用 parent.window.fnName()就可以了;

這種操作難免會(huì)遇到父頁(yè)面獲取子頁(yè)面的元素,或者子頁(yè)面獲取父頁(yè)面的元素進(jìn)行操作;

非跨域 父頁(yè)面獲取子頁(yè)面元素操作

首先,我們有幾種方法拿到子頁(yè)面的window對(duì)象或者doucument 對(duì)象,(還是使用上面的html)

//原生js 獲取子頁(yè)面window對(duì)象1, var childWindow=document.getElementById("f").contentWindow;2, var childWindow=document.getElementsByTagName('f')[0].contentWindow;//其實(shí)也就是普通的獲取方法,只是后面多了一個(gè)contentWindow;//jqueryvar childWindow=$('#f').contentWindow;//獲取子頁(yè)面的document對(duì)象 (假設(shè)已經(jīng)通過(guò)上面的方法得到了window對(duì)象)var frameDoc=childWindow.document;var frameBody=frameDoc.body;//jquery 也是跟上面的一樣var frameDoc=$(childWindow.document);//原生獲取元素childWindow.document.getElementById('a') //上面都已經(jīng)拿到了子頁(yè)面的window對(duì)象,所以獲取子頁(yè)面的元素也就只需要想普通操作那樣獲取就好childWindow.document.getElementById('a').style.color='red' //改個(gè)顏色//jq拿子頁(yè)面元素$('#f').contents().find('#a'); //$('#f').contents 這相當(dāng)于拿到了iframe 里面所有的dom;            
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 龙川县| 左权县| 安岳县| 泌阳县| 临沭县| 沧源| 阜康市| 山东省| 宣化县| 上虞市| 日照市| 措美县| 新巴尔虎右旗| 沛县| 盘锦市| 常熟市| 胶州市| 镇雄县| 罗平县| 武汉市| 中宁县| 汕尾市| 鞍山市| 库尔勒市| 沅江市| 电白县| 梁河县| 临澧县| 杭锦旗| 淮南市| 黄冈市| 晋江市| 大冶市| 顺昌县| 土默特右旗| 青州市| 林口县| 咸阳市| 馆陶县| 赞皇县| 宣化县|