一、同域獲取iframe內容
這裡有兩個細節:
1. 取iframe內的文件物件,標準瀏覽器使用
contentdocument屬性,ie低版本(ie6,7,8)使用
document屬性。
2. calcpageheight函式計算頁面的實際高度,標準瀏覽器使用document.documentelement,低版本ie使用document.body,預設取clientheight,出現滾動條的取scrollheight,最後取兩個值中最大的。
二、跨域獲取iframe高度
1、主域一致,子域不同
比如』a.alitrip.com/a.html』和』b.alitrip.com/b.html』兩個跨子域頁面
2、主域、子域均不相同
分別有以下資源
頁面a : a.alitrip.com/a.html
頁面 b:a.alitrip.com/b.html
頁面 c:dev.taobao.com/c.html
這四個資源有如下關係
1. a裡嵌入c,a和c是不同域的,即跨域iframe
2. c裡嵌入b,c和b是不同域的,但a和b是同域的
3. c裡嵌入d.js,d.js放在和a同域的專案裡
通過乙個間接方式實現,即通過乙個隱藏的b.html來實現高度自適應
嵌入在c頁面中,它是隱藏的,通過parent.parent訪問到a,再改變a的iframe(c.html)高度,這是最關鍵的,因為a,b是同域的所以可以訪問a的文件物件等。
嵌入在a中,和a不同域,要實現c的自適應,c多高則a裡的iframe就設為多高。c裡嵌入b.html 和 d.js
在頁面c載入後計算其高度,然後將計算出的height賦值給c裡引入的iframe(b.html)的src
三、頁面100%自適應
四、postmessage資料通訊,通過監聽window的message事件接收訊息
postmessage(data,origin)方法接受兩個引數
data:要傳遞的資料。
origin:字串引數,指明目標視窗的源,協議+主機+埠號[+url],url會被忽略,所以可以不寫,這個引數是為了安全考慮,postmessage()方法只會將message傳遞給指定視窗,當然如果願意也可以建引數設定為"*",這樣可以傳遞給任意視窗,如果要指定和當前視窗同源的話設定為"/"。
messageevent的幾個重要屬性
data:傳遞來的message
source:傳送訊息的視窗物件
origin:傳送訊息視窗的源(協議+主機+埠號)
跨域iframe獲取高度
需求背景 父頁面內嵌乙個跨域的子頁面,但是子頁面的內容是未知的,意味著子頁面的高度也是未知的,父頁面的樣式不能定死高度,不然會出現雙重滾動條 子頁面有滾動條,父頁面也會出現滾動條 解決方案 公司裡大神出的方案,跨域的b.html頁面中再嵌入乙個 頁面agent.html,頁面跟最外層的父頁面a.ht...
解決跨域iframe自適應高度
關於iframe自適應高度的討論可以先看看口碑ued的部落格 大概原理見下圖 可以直接看示例 下面直接上 了 下面是核心 loader.js 檔案proxy.html 使用方法 一 在主頁面要包含的iframe中引入loader.js 二 傳入引數。有兩種傳參方法 1.在主頁面引用iframe的時候...
跨域iframe的高度自適應
跨域iframe的高度自適應 1.跨子域的iframe高度自適應 2.完全跨域的iframe高度自適應 同域的我們可以輕鬆的做到 1.父頁面通過iframe的contentdocument或document屬性訪問到文件物件,進而可以取得頁面的高度,通過此高度值賦值給iframe tag。2.子頁面...