ajax 跨域的一些資料

跨域有很多種類型,每種都有各自的方法。但是查了那麼多資料,發現沒有一個完美的解決方法。所以現在還在收集資料中

第一道曙光:iframe來實現跨域

原理:就是父頁面(a.domian.com)通過調用iframe(b.domian.com)的js,讓iframe來訪問(b.domian.com)的內容都不算跨域了。

實現iframe同基礎域跨域的關鍵——document.domain的介紹

(本來還希望無限制的跨域,發現iframe更本實現不了。所以這道光算基本滅了)

正文:

document.domain 只要作用是 得到當前網頁的域名。 在不同的cms中都有應用。自己在看一上cms時用到這塊,一直提交腳本錯誤,最後讓找到原因,就是document.domain的問題,服務器和本地的document.domain是不相同的。
比如在地址欄裏輸入: 
javascript:alert(document.domain); //www.cfansblog.com 


我們也可以給document.domain屬性賦值,不過是有限制的,你只能賦成當前的域名或者基礎域名。 
比如: 
javascript:alert(document.domain = "cfansblog.com"); //cfansblog.com 
javascript:alert(document.domain = "www.cfansblog.com"); //www.cfansblog.com 


上面的賦值都是成功的,因爲www.cfansblog.com是當前的域名,而cfansblog.com是基礎域名。 


但是下面的賦值就會出來“參數無效”的錯誤: 
javascript:alert(document.domain = "cfansblog.com"); //參數無效 
javascript:alert(document.domain = "ttt.cfansblog.com"); //參數無效 


因爲cctv.net與ttt.cfansblog.com不是當前的域名也不是當前域名的基礎域名,所以會有錯誤出現。 
這是爲了防止有人惡意修改document.domain來實現跨域偷取數據。 

利用document.domain 實現跨域: 
前提條件:這兩個域名必須屬於同一個基礎域名!而且所用的協議,端口都要一致,否則無法利用document.domain進行跨域 

Javascript出於對安全性的考慮,而禁止兩個或者多個不同域的頁面進行互相操作。 
相同域的頁面在相互操作的時候不會有任何問題。 

比如在:aaa.com的一個網頁(a.html)裏面 利用iframe引入了一個bbb.com裏的一個網頁(b.html)。 
這時在a.html裏面可以看到b.html裏的內容,但是卻不能利用javascript來操作它。因爲這兩個頁面屬於不同的域,在操作之前,js會檢測兩個頁面的域是否相等,如果相等,就允許其操作,如果不相等,就會拒絕操作。 
這裏不可能把a.html與b.html利用JS改成同一個域的。因爲它們的基礎域名不相等。(強制用JS將它們改成相等的域的話會報跟上面一樣的“參數無效錯誤。”) 

所以如果在a.html裏引入aaa.com裏的另一個網頁,是不會有這個問題的,因爲域相等。 

有另一種情況,兩個子域名: 
aaa.xxx.com 
bbb.xxx.com 

aaa裏的一個網頁(a.html)引入了bbb 裏的一個網頁(b.html), 
這時a.html裏同樣是不能操作b.html裏面的內容的。 
因爲document.domain不一樣,一個是aaa.xxx.com,另一個是bbb.xxx.com。 

這時我們就可以通過Javascript,將兩個頁面的domain改成一樣的, 
需要在a.html裏與b.html裏都加入: 

document.domain = "xxx.com"; 
這樣這兩個頁面就可以互相操作了。也就是實現了同一基礎域名之間的“跨域”。 

(經驗證如果嘗試賦予document.domain不同的基礎與,chrome會報錯)

第二道曙光:jsonp

第三道曙光:jquery的getScript

逛博客園時發現了html5居然提供安全跨域策略,在此特地把這篇文章收錄着這裏:

http://www.cnblogs.com/wzh2010/archive/2012/05/28/2522384.html

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