JS如何對Iframe內外頁面進行操作總結
在iframe外獲取iframe里的內容
方式一
通過contentWindow和contentDocument這兩個API:
var iframe = document.getElementById("iframe1"); var iwindow = iframe.contentWindow; var idoc = iwindow.document; var idocument = iframe.contentDocument; console.log("window",iwindow);//獲取iframe的window對象 console.log("document",idoc); //獲取iframe的document console.log("html",idoc.documentElement);//獲取iframe的html
其中iframe.contentWindow可以獲取iframe的window對象,iframe.contentDocument可以獲取iframe的document對象。
方式二
結合Name屬性,通過window提供的frames獲取:
<iframe src ="/index.html" id="ifr1" name="ifr2" scrolling="yes"> <p>Your browser does not support iframes.</p> </iframe> <script type="text/javascript"> console.log(window.frames['ifr2'].window); console.dir(document.getElementById("iframe").contentWindow); </script>
在iframe內獲取iframe外的內容
window.parent 獲取上一級的window對象,如果還是iframe則是該iframe的window對象
window.top 獲取最頂級容器的window對象,即,就是你打開頁面的文檔
在iframe中調用父頁面中定義的方法和變量
window.parent.window.parentMethod(); window.parent.window.parentValue;
在父頁面操作iframe子頁面的方法和變量
window.frames["iframe_Name"].window.childMethod(); window.frames["iframe_Name"].window.childValue;
總結
在使用Iframe時還需要注意以下兩點:
- 要確保在iframe加載完成后再進行操作,如果iframe還未加載完成就開始調用里面的方法或變量,會產(chǎn)生錯誤;
- 如果iframe所鏈接的是外部頁面,因為安全機制不能使用同域名下的通信方式;
判斷iframe加載完成
iframe.onload = function() { // TODO }
不同域通信
父頁面向子頁面?zhèn)鬟f數(shù)據(jù)
利用location對象的hash值,通過它傳遞通信數(shù)據(jù)。在父頁面設置iframe的src后面多加個data字符串,然后在子頁面中通過某種方式能即時的獲取到這兒的data。
子頁面向父頁面?zhèn)鬟f數(shù)據(jù)
利用一個代理iframe,它嵌入到子頁面中,并且和父頁面必須保持是同域,然后通過它充分利用上面同域通信方式的實現(xiàn)原理,把子頁面的數(shù)據(jù)傳遞給代理iframe,然后由于代理的iframe和主頁面是同域的,所以主頁面就可以利用同域的方式獲取到這些數(shù)據(jù)。
到此這篇關于JS如何對Iframe內外頁面進行操作的文章就介紹到這了,更多相關JS對Iframe頁面操作內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
聊聊JavaScript中的try...catch使用小技巧
作為一名web前端工程師,JavaScript中的try...catch是我們常用的特性之一,用于處理代碼中可能出現(xiàn)的錯誤,本文小編將和大家一起聊聊JavaScript中的try...catch使用小技巧,需要的朋友可以參考下2023-11-11使用Javascript和DOM Interfaces來處理HTML
使用Javascript和DOM Interfaces來處理HTML...2006-10-10javascript replace()正則替換實現(xiàn)代碼
javascript-replace()基礎,一次完成將"<,>"替換"<>"實例2010-02-02淺析JavaScriptSerializer類的序列化與反序列化
本篇文章主要介紹了JavaScriptSerializer類 對象序列化與反序列化的方法、屬性以及實例代碼,有需要的朋友可以參考一下2016-11-11JavaScript 節(jié)點操作 以及DOMDocument屬性和方法
最近發(fā)現(xiàn)DOMDocument對象很重要,還有XMLHTTP也很重要 注意大小寫一定不能弄錯.2007-12-12JS判斷不同分辨率調用不同的CSS樣式文件實現(xiàn)思路及測試代碼
最近看一個網(wǎng)站,發(fā)現(xiàn)顯示器不同的分辨率,樣式文件調用的也不一樣,于是很好奇研究并寫了一個,經(jīng)測試感覺還不錯,感興趣的你可以來看看哦2013-01-01