iframe子頁面與父頁面js通訊方式

2021-06-28 09:25:13 字數 1416 閱讀 7852

iframe框架中的頁面與主頁面之間的通訊方式根據iframe中src屬性是同域鏈結還是跨域鏈結,有明顯不同的通訊方式,同域下的資料交換和dom元素互訪就簡單的多了,而跨域的則需要一些巧妙的方式來實現通訊。

父頁面 parent.html

子頁面 child.html

如上面示例所示父頁面呼叫子頁面的方法可通過:framename.window.childmethod();(這種方式相容各種瀏覽器)

子頁面呼叫父頁面的方法:parent.window.parentmethod();

根據framename.window得到了子視窗物件之後,再訪問其中的dom元素就跟訪問同一頁面中的dom元素沒區別了都可以通過document.getelementbyid(),document.getelementsbyname()[index]。如:parent.window.document.getelementsbyname("myframe")[0],myframe.window.document.getelementbyid("button")其中的window都是可以省略的。

要確保在iframe載入完成後再進行操作,如果iframe還未載入完成就開始呼叫裡面的方法或變數,無疑會產生錯誤。判斷iframe是否載入完畢有兩種方法:

1.在iframe上用onload事件;

2.用document.readystate=="complete"來判斷

如果iframe所鏈結的是外部頁面,因為安全機制則不能使用同網域名稱下的通訊方式了。

實現的技巧就是利用 location 物件的 hash 值,通過它傳遞通訊資料,我們只需要在父頁面設定 iframe的 src 後面多加個#data 字串(data就是你要傳遞的資料),然後在 子頁面 中通過某種方式能即時的獲取到這兒 data 就可以了,其實常用的一種方式就是:

1. 在 子頁面 中通過 setinterval 方法設定定時器, 監聽 location.href 的變化即可獲得上面的 data 資訊

2. 然後 子頁面 就能根據這個 data 資訊進行相應的邏輯處理。

實現的技巧就是利用乙個** iframe c,它嵌入到 子頁面中,並且和父頁面必須保持是同域,然後我們通過它充分利用上面第一種通訊方式的實現原理就能把 子頁面的資料傳遞給 iframec,接下來的問題就是怎麼讓iframec把資料傳遞給主頁面a ,因為,iframec 和主頁面是同域的,所以它們之間傳遞資料就變得簡單多了,屬於同網域名稱下的通訊問題了,如前面所討論的,在這裡的可以使用乙個經常使用的屬性 window.top (也可以使用window.parent.parent),它返回對載入瀏覽器得最頂層 window 物件的引用,這樣我們就能直接條用父頁面中方法啦。

iframe子頁面與父頁面js通訊

父頁面呼叫子頁面方法 framename.window.childmethod 子頁面呼叫父頁面方法 parent.window.parentmethod 獲取到頁面的window.document物件後,即可訪問dom元素 注意事項 要確保在iframe載入完成後再進行操作,如果iframe還未載...

js之iframe子頁面與父頁面通訊

iframe子頁面與父頁面通訊根據iframe中src屬性是同域鏈結還是跨域鏈結,通訊方式也不同。父頁面parent.html 子頁面child.html 方法呼叫 父頁面呼叫子頁面方法 framename.window.childmethod 子頁面呼叫父頁面方法 parent.window.pa...

js之iframe子頁面與父頁面通訊

iframe子頁面與父頁面通訊根據iframe中src屬性是同域鏈結還是跨域鏈結,通訊方式也不同。父頁面呼叫子頁面方法 framename.window.childmethod 子頁面呼叫父頁面方法 parent.window.parentmethod 獲取到頁面的window.document物件...