網絡修養-內聯框架iframe巧妙跨域

iframe

常用屬性


1.frameborder:是否顯示邊框,1(yes),0(no)

2.height:框架作爲一個普通元素的高度,建議在使用css設置。

3.width:框架作爲一個普通元素的寬度,建議使用css設置。

4.name:框架的名稱,window.frames[name]時專用的屬性。

5.scrolling:框架的是否滾動。yes,no,auto。

6.src:內框架的地址,可以使頁面地址,也可以是圖片的地址。
7.srcdoc , 用來替代原來HTML body裏面的內容。但是IE不支持, 不過也沒什麼卵用
8.sandbox: 對iframe進行一些列限制,IE10+支持

常用功能

  1. 可以一個網頁裏嵌入另一個網頁
  2. 導航欄tab切換頁(古老的做法)、在線編輯器、廣告植入
  3. 歷史記錄管理,解決ajax化網站響應瀏覽器前進後退按鈕的方案
  4. 跨域通信等

iframe利弊

  1. iframes 阻塞頁面加載
  2. 觸發 window 的 onload 事件是非常重要的。onload 事件觸發使瀏覽器的 “忙” 指示器停止,告訴用戶當前網頁已經加載完畢。當 onload 事件加載延遲後,它給用戶的感覺就是這個網頁非常慢
  3. window 的 onload 事件需要在所有 iframe 加載完畢後(包含裏面的元素)纔會觸發。通過 JavaScript 動態設置 iframe 的 SRC 可以避免這種阻塞情況

獲取iframe裏的內容

  1. 主要的兩個API就是contentWindow,和contentDocument
  2. iframe.contentWindow, 獲取iframe的window對象
  3. iframe.contentDocument, 獲取iframe的document對象

在iframe中獲取父級內容

  1. 同理,在同域下,父頁面可以獲取子iframe的內容。那麼子iframe同樣也能操作父頁面內容。在iframe中,可以通過在window上掛載的幾個API進行獲取.
window.parent 獲取上一級的window對象,如果還是iframe則是該iframe的window對象
window.top 獲取最頂級容器的window對象,即,就是你打開頁面的文檔
window.self 返回自身window的引用。可以理解 window===window.self

判斷iframe加載完成

1. 非ie下使用onload事件

iframe(dom元素).onload = function () {}

2. ie下使用onreadystatechange或者設定計時器

iframe.onreadystatechange = function(){
      if (iframe.readyState == "complete" || iframe.readyState == ''loaded”){
alert("Local iframe is now loaded.");
     }
}

同域/跨域

iframe跨域通訊之document.domain

1. 對於主域相同子域不同的兩個頁面,我們可以通過document.domain + iframe來解決跨域通信問題。

舉個例子,網頁a(http://www.easonwong.com)和網頁b(http://script.easonwong.com)
兩者都設置document.domain = 'easonwong.com'(這樣瀏覽器就會認爲它們處於
同一個域下),然後網頁a再創建iframe上網頁b,就可以進行通信啦~

iframe跨域通訊之postMessage

點這裏

window.name

  • 這個是解決跨域中父頁面向子頁面請求數據
  1. 建立iframe,指定src爲被跨域的頁面
  2. 被跨域文件修改window.name,將數據傳給window.name
  3. 將iframe .src修改爲本域代理文件,然後就可以取到contentWindow.name
  4. 進行處理數據,清除iframe充分的運用了window.name因爲頁面的網址更改而名稱不更改的特性

在這裏插入圖片描述

window.location.hash

  • 解決子頁面訪問父頁面數據問題(window.location.href)
  1. 通過錨點#傳遞數據。利用定時器實時監測
  2. 錨點特性#不刷新頁面
  3. 定時器耗性能方法比較笨!
  4. location.hash缺點
    1、傳遞數據量有限
    2、不太安全

在這裏插入圖片描述
這個錨點後面的num就是你可以存入的數據

待更新!!!

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