1. 程式人生 > >iframe巧妙跨域(如今已經不用了)

iframe巧妙跨域(如今已經不用了)

iframe:

iframe是一個標籤dom元素(<iframe src="" frameborder="0"></iframe>),內聯框架

作用:可以一個網頁裡嵌入另一個網頁(具有父子關係)

用法:導航欄tab切換頁(古老的做法)、線上編輯器、廣告植入,歷史記錄管理,解決ajax化網站響應瀏覽器前進後退按鈕的方案,跨域通訊等

iframe的利弊:

iframe會阻塞頁面載入,

觸發 window 的 onload 事件是非常重要的。onload 事件觸發使瀏覽器的 “忙” 指示器停止,告訴使用者當前網頁已經載入完畢。當 onload 事件載入延遲後,它給使用者的感覺就是這個網頁非常慢。

window 的 onload 事件需要在所有 iframe 載入完畢後(包含裡面的元素)才會觸發。通過 JavaScript 動態設定 iframe 的 src 可以避免這種阻塞情況

解決跨域問題 這個很牽強... 其實他已經不怎麼用了(ajax的出現)

如何獲取iframe內的window(然後在獲取window下的資料):

獲取子視窗
1.document.getElementsByTagName('iframe')[0].contentWindow
2.document.getElementsById('id').contentWindow
簡易寫法 
 window.frames['iframe的name'] ==> 給iframe新增name屬性(屬性值為要獲取的資料)

搞事的IE專用:
3.document.iframes[name].contentWindow
4.document.iframes[i].contentWindow

父子頁面視窗的關係:

window.self
就是自己--->神經病的屬性

window.parent
父級視窗物件

window.top
頂級視窗物件

window.name :

window.name 特點 頁面過載重新整理 name值不變 即使換了一個頁面依舊能訪問到。

跨域都要受到同源策略的限制。但是通過windows.name 可以巧妙的實現跨域

在不同源的網址上設定window.name 然後在當前網頁視窗載入到和目標同源的url,這樣就能實現獲取不同源的資料。

改變不同源網站的iframe的url,把url改成與想要訪問資料網址同源的iframe的url,就能間接實現跨域嗎。

下面程式碼實現要安裝本地伺服器。

<iframe src="../two/index.html" frameborder="1" width=500 height=500></iframe>
<script>
    var oIframe = document.getElementsByTagName('iframe')[0];
    //獲取子視窗的window
    var iframe = oIframe.contentWindow;
    var flag = false;
    //之所以判斷if是為了iframe的url改變時會重新整理頁面(一直重新整理,我們只需要一次,鎖住就行)
    oIframe.onload = function () {
        if (!flag) {
            flag = true;
            oIframe.src = './three.html';
        } else {
            console.log(iframe.name);
        }
    }
</script>