一、什么是iframe
iframe是html中標(biāo)簽元素,用于在網(wǎng)頁中內(nèi)嵌另一個(gè)網(wǎng)頁,即內(nèi)嵌內(nèi)聯(lián)框架。iframe標(biāo)簽規(guī)定一個(gè)內(nèi)聯(lián)框架。一個(gè)內(nèi)聯(lián)框架被用來在當(dāng)前 HTML 文檔中嵌入另一個(gè)文檔。所有的主流瀏覽器都支持iframe標(biāo)簽。你可以把提示的文字放到 iframe 和 /iframe里面,這樣不支持 iframe 的瀏覽器就會(huì)出現(xiàn)提示的文字。
二、iframe互相操作
1.首先明確一點(diǎn),每個(gè)iframe里各自維護(hù)自己的全局window對(duì)象。
2.另外明確一點(diǎn),只有同域才能進(jìn)行iframe之間的讀改寫,跨域時(shí),只能進(jìn)行簡單的路由跳轉(zhuǎn)。
3.在父級(jí)使用window.frames[name]可以獲取子iframe的window對(duì)象,相應(yīng)的可以獲取document對(duì)象,從而對(duì)子iframe進(jìn)行dom操作。
4.在子iframe想要操作父元素的iframe,直接使用子元素的window.parent來獲取父級(jí)元素的window對(duì)象,從而獲取document來操作dom。
三、iframe之間的通信
1.發(fā)送信息:
當(dāng)我們要向指定iframe發(fā)送信息時(shí),首先要獲取指定iframe的window對(duì)象,然后使用這個(gè)window對(duì)象的postMessage發(fā)送消息。
otherWindow.postMessage(data, orgin,[transfer])
data是待發(fā)送的數(shù)據(jù)
orgin是發(fā)送的地址,為‘*’表示無限制,該參數(shù)必傳,否則會(huì)報(bào)錯(cuò)
2.接受信息:
在要接受信息的地方,我們使用window的onmessage事件來接受消息,該事件會(huì)返回一個(gè)事件對(duì)象,其中data包含了返回的數(shù)據(jù),orgin返回發(fā)送源。
3.安全問題:當(dāng)我們明確知道orgin是誰時(shí),不要使用‘*’,當(dāng)要接受信息時(shí),先判斷orgin是否是我們要接受的源,在做后續(xù)操作。
四、注意事項(xiàng)
獲取子元素的document時(shí)要確保子元素所有dom元素已經(jīng)掛載完畢,因此在原生的寫法時(shí),必須寫在window的onload事件中。
五、iframe 如何使用呢?
通常我們使用iframe直接在頁面嵌套iframe標(biāo)簽指定的src就可以了。
如下:
< div id='box'>
< iframe id="iframe_page" src="b.html" data-ke-src="b.html" frameborder="0" width="100%" height="100%">< / iframe>
iframe 的常用屬性:
name : 規(guī)定 iframe 的名稱。
width: 規(guī)定 iframe> 的寬度。
height :規(guī)定 iframe 的高度。
src :規(guī)定在 iframe 中顯示的文檔的 URL。
frameborder : 規(guī)定是否顯示 iframe 周圍的邊框。 (0為無邊框,1位有邊框)。
align :規(guī)定如何根據(jù)周圍的元素來對(duì)齊 iframe。(left,right,top,middle,bottom)。
scrolling :規(guī)定是否在 iframe 中顯示滾動(dòng)條。 (yes,no,auto)
iframe默認(rèn)有一個(gè)寬高,存在邊界
iframe是一個(gè)行內(nèi)塊級(jí)元素,可以通過display修改
那如何獲取iframe里面的內(nèi)容呢?
var iframe = document.getElementById("iframe_page"); //獲取iframe標(biāo)簽
var iwindow = iframe.contentWindow; //獲取iframe的window對(duì)象
var idoc = iwindow.document; //獲取iframe的document對(duì)象
console.log(idoc.documentElement); //獲取iframe的html
console.log("body",idoc.body);
但是,這里面是獲取不到里面的DOM的,可以在URL中獲取(也就是引入的html文件)
六、iframe 的優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
重載頁面時(shí)不需要重載整個(gè)頁面,只需要重載頁面中的一個(gè)框架頁(減少數(shù)據(jù)的傳輸,減少網(wǎng)頁的加載時(shí)間);
技術(shù)簡單,使用方便,主要應(yīng)用于不需要搜索引擎來搜索的頁面;
方便開發(fā),減少代碼的重復(fù)率(比如頁面的header,footer);
缺點(diǎn):
會(huì)產(chǎn)生很多的頁面,不易于管理;
多框架的頁面會(huì)增加服務(wù)器的http請(qǐng)求;
瀏覽器的后退按鈕無效等。
上一篇:前端html頁面上如何獲取傳值數(shù)據(jù)
下一篇:js中將兩個(gè)以上的一維數(shù)組轉(zhuǎn)成一個(gè)二維數(shù)組