Ajax跨域一直是個比較麻煩的問題,例如:斷橋殘雪在一個項目中使用了open打開一個跟父窗口不同域名的新頁面,結果子窗口就不能傳值給父窗口了;再如:我在www.2fool.cn下不可以獲取love.2fool.cn域名下的頁面內容。瀏覽器的跨域限制是為了安全,可是當我們想要在一個域名下請求另外一個域名的內容的時候就感覺不那么爽了。
我在WordPress天氣插件、滔滔API接口處理上都使用了JSONP的方法來實現的跨域。而今天我要通過使用JS的document.domain和iframe來解決Ajax跨子域的問題。
原理
通過給主頁面跟請求頁面設置相同的document.domain來,欺騙瀏覽器,達到Ajax跨子域的效果,此方法在IE,chrome,Firefox,Safari,Opera下測試通過。
缺點:無法實現不同主域名之間的通訊。并且當在一個頁面中還包含有其它的iframe時,會產生安全性異常,拒絕訪問。
使用document.domain+iframe跨域實例
首先我們假設主頁面地址為:http://www.js8.in/mywork/crossdomain/index.html,我們要加載的內容是位于work.2fool.cn域名下的helloworld.txt。我們需要在主頁面中設置document.domain為2fool.cn,然后主頁面添加一個iframe,src為域名work.2fool.cn下的一個url,在iframe頁面中同樣設置document.domain為2fool.cn,同時iframe中需要添加Ajax的函數,例如引入jQuery.js。
主頁index.html的主要代碼如下:
iframe頁面主要代碼如下:
演示Demo:點擊查看,演示下載