跨域iframe高度計算

2021-08-03 20:26:24 字數 2243 閱讀 4058

一、同域獲取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.子頁面...