天天看點

iframe的一些記錄1、iframe無重新整理檔案上傳2、iframe自适應高度3、iframe跨域通信

首要要做配置操作,配置兩個域名,我這裡使用的是Apache。附件中的demo1和demo2

iframe的一些屬性介紹:

屬性

描述

align

left

right

top

middle

bottom

不贊成使用。請使用樣式代替。

規定如何根據周圍的元素來對齊此架構。

frameborder

1

規定是否顯示架構周圍的邊框。

height

pixels

%

規定 iframe 的高度。

longdesc

URL

規定一個頁面,該頁面包含了有關 iframe 的較長描述。

marginheight

定義 iframe 的頂部和底部的邊距

marginwidth

定義 iframe 的左側和右側的邊距。

name

frame_name

規定 iframe 的名稱

sandbox

""

allow-forms

allow-same-origin

allow-scripts

allow-top-navigation

啟用一系列對 <iframe> 中内容的額外限制。

scrolling

yes

no

auto

規定是否在 iframe 中顯示滾動條。

seamless

規定 <iframe> 看上去像是包含文檔的一部分。

src

規定在 iframe 中顯示的文檔的 URL。

srcdoc

HTML_code

規定在 <iframe> 中顯示的頁面的 HTML 内容。

width

定義 iframe 的寬度。

這個上傳我伺服器端使用的是PHP代碼。

 使用iframe上傳的關鍵點是target="iframeUpload",這個屬性的設定。action.php中的代碼如下:

同域的情況下:

網絡中的方法一:直接用onload函數擷取iframe中的内容高度,如果頁面載入一次以後,高度不變,這招是挺好用的,但是我在firefox與IE中,表現不理想,如圖,并沒有完全的将頁面顯示,chrome和safrai的表現不錯。

後面發現,如果在iFrame1.document.body.scrollHeight的後面在加上20的話,iframe也是能完全展現出來的,這個應該是受到了我autoheight.html這個頁面裡的CSS影響,

autoheight.html中的頁面代碼是這樣的:

為了驗證我的猜想,我把padding給去除掉,還是用原先的代碼onload="this.height=iFrame1.document.body.scrollHeight",但事實與我的猜想完全不同

 這句是用來擷取iframe的window對象。

意思就是一些浏覽器可以通過iframeElement.contentDocument.parentWindow獲得iframe的window對象。經過測試發隻有IE9與IE8是根據iframe.contentDocument.parentWindow來擷取的,其他firefox、chrome、safrai、IE6、IE7都是根據frame.contentWindow擷取的

這句話就是在擷取iframe的高度了。

body是DOM對象裡的body子節點,即 <body> 标簽;

documentElement 是整個節點樹的根節點root,即<html> 标簽;

剛剛上一個方法由于用的是body.scrollHeight導緻了各個浏覽器的解釋不同,引起了顯示的不一緻。經測試發現使用documentElement.scrollHeight後,都能正确顯示。

異域的情況下:

跨域的時候,由于js的同源政策,父頁面内的js不能擷取到iframe頁面的高度。需要一個頁面來做代理。總共有三張頁面,

index.html中代碼:

iframe.html中代碼:

agent.html中代碼:

網絡方法一:這是一種通過第三張頁面來跨域執行函數,一種代理的感覺

iFrame4與iframeD分别為index_cross.html與cross_domain1.html頁面上面的iframe的id。

這是一種非常優雅的方式,但是是用url的方式在傳遞參數,大小被受到了限制,如果資料量大的話,是會有問題的。

index_cross.html中代碼:

cross_domain1.html中代碼:

cross_domain2.html中代碼:

 成功後出現的提示資訊

網絡方法二:

1) 支援HTML5的浏覽器可以使用postMessage

  IE8、IE9、firefox、chrome和safrai可用postMessage函數

  index_cross.html中代碼:

  post_message.html中代碼:

2) IE6、IE7可以用navigator對象的跨大域漏洞

  navigator.html中代碼:

源碼可以在這裡下載下傳:

<a href="http://files.cnblogs.com/strick/iframe.rar">iframe.rar</a>

參考資料:

    本文轉自 咖啡機(K.F.J)   部落格園部落格,原文連結:http://www.cnblogs.com/strick/p/3814872.html,如需轉載請自行聯系原作者

繼續閱讀