使用 實現跨域通信

什麼是iframe
iframe就是我們常用的iframe標籤:<iframe>。iframe標籤是框架的一種形式,也比較常用到,iframe一般用來包含別的頁面,例如我們可以在我們自己的網站頁面加載別人網站或者本站其他頁面的內容。
iframe的用法有很多,接下來說一下iframe的其中一個比較實用的用法----跨域通信
假設現在有兩個系統A,B:A系統的某個頁面有一部分顯示的內容是B系統的,怎麼辦?
<div class="modal-body" id="housekeeperBody">
<iframe src="http://erp.young51.com/user/indexIframe.action"  name="OpenartDialog14577934462321"  frameborder="0" allowtransparency="true" style="width: 900px; height: 565px; border: 0px none;">
//這裏就是你要加載的頁面
</iframe>
</div>
這裏iframe的核心屬性就是“src”它表示你要引用的頁面一個請求(這裏的src實際就是對B系統的一個請求,B將返回你一個HTML,如果B系統是另外一個負責的,那麼關於這個請求的另一端你就不必關心了)。和其他html標籤一樣,它也有一些其他的屬性,如該列的name,height,style等等
讀到這裏會遇到一個問題 
JavaScript出於安全方面的考慮,不允許跨域調用其他頁面的對象。但在安全限制的同時也給注入iframe或是ajax應用上帶來了不少麻煩。這裏把涉及到跨域的一些問題簡單地整理一下:
首先什麼是跨域,簡單地理解就是因爲JavaScript同源策略的限制,a.com 域名下的js無法操作b.com或是c.a.com域名下的對象。更詳細的說明可以看下錶:
URL


第一,如果是協議和端口造成的跨域問題“前臺”是無能爲力的,
第二:在跨域問題上,域僅僅是通過“URL的首部”來識別而不會去嘗試判斷相同的ip地址對應着兩個域或兩個域是否在同一個ip上。
“URL的首部”指window.location.protocol +window.location.host,也可以理解爲“Domains, protocols and ports must match”。
我的解決方案是:document.domain+iframe的設置
對於主域相同而子域不同的例子,可以通過設置document.domain的辦法來解決。具體的做法是可以在http://www.a.com/a.html和http://script.a.com/b.html兩個文件中分別加上document.domain = ‘a.com’;然後通過a.html文件中創建一個iframe,去控制iframe的contentDocument,這樣兩個js文件之間就可以“交互”了。




轉載:http://xinsir.blog.51cto.com/5038915/1858731







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