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>