javascript iframe 操作

學習中遇到點小問題,這個是在網上找到的,先備忘。

1.父頁面中獲取IFRAME的WINDOW對象

獲得了window對象後,就可以調用iframe頁面中定義的方法等。

IE:可以通過iframeId、windows.iframeId、windows.iframeName、window.frames[iframeId]、window.frames[iframeName]、window.frames[iframeIndex]和iframeElement.contentWindow這6種方法來獲取iframe的window對象。

FF:可以通過windows.iframeName、window.frames[iframeName]和iframeElement.contentWindow這3種方法獲取window對象。

總結:爲了兼容大多數瀏覽器,應使用iframeElement.contentWindow來獲取。見如下代碼:

1
var iframe = document.getElementByIdx_x('iframe1').contentWindow;

ie6和ie7還可以使用document.frames["iframe Name"]或者document.frames["iframe ID"]來獲取相當於contentWindow屬性,而firefox和chrome並不支持這些document.frames["iframe Name"]或者document.frames["iframe ID"],但是window.frames["iframe Name"]或window.frames[index](index是索引值)也支持所有主流瀏覽器;

2.父頁面中獲取IFRAME的DOCUMENT對象

標準瀏覽器:通過iframeElement.contentDocument來引用iframe的doument對象,但是IE瀏覽器不支持,確切說應該是IE 6/7,IE8中可以用此方法來獲取了。

IE:用window.frames[iframeId].document來獲取

因爲document是window的一個子對象,你也可以先獲取iframe的window對象,再通過window.document來引用。

總結:應使用以下兩方法來獲取,見代碼:

1
2
3
4
5
6
7
8
9
10
"iframe1" src="frame1.html">  
"text/javascript">  
    //獲取iframe的document對象         
    //方法1:先獲取window對象再通過window.docuemnt
    var iframe = document.getElementByIdx_x('iframe1').contentWindow.document;  
    //方法2:分支判斷
    function getIframeDom(iframeId) {  
        return document.getElementByIdx_x(iframeId).contentDocument || window.frames[iframeId].document;  
    }  
3.IFRAME頁面獲取父頁面的WINDOW對象

parent:父頁面window對象
window.parent
top:頂層頁面window對象
window.top
self:始終指向當前頁面的window對象(與window等價)

如果窗口是頂級窗口,那麼parent==self==top
根據這個可以防止網頁被嵌套:

1
2
3
if(window!=window.top){
    window.top.location.href=window.location.href:
}

兼容性:適用於所有瀏覽器,當拿到了父頁面的window對象後,就可以訪問父頁面定義的全局變量和函數。

注:chrome要求在服務器環境下進行iframe操作。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章