ajax跨域和js的跨域通訊(cross the site)的幾種解決方案
最近做的乙個專案中需要ajax跨域取得資料,如果是在本域中確實沒有問題,但是放到二級域和其他域下瀏覽器直接就彈出提示框:「該頁正在訪問其控制範圍之外的資料,這有些危險,是否繼續"
1.什麼引起了ajax跨域不能的問題
ajax本身實際上是通過xmlhttprequest物件來進行資料的互動,而瀏覽器出於安全考慮,不允許js**進行跨域操作,所以會警告。
2.有什麼完美的解決方案麼?
沒有。解決方案有不少,但是只能是根據自己的實際情況來選擇。
具體情況有:
一、本域和子域的相互訪問: www.aa.com和book.aa.com
二、本域和其他域的相互訪問: www.aa.com和www.bb.com 用 iframe
三、本域和其他域的相互訪問: www.aa.com和www.bb.com 用 xmlhttprequest訪問**
四、本域和其他域的相互訪問: www.aa.com和www.bb.com 用 js建立動態指令碼
解決方法:
一、如果想做到資料的互動,那麼www.aa.com和book.aa.com必須由你來開發才可以。可以將book.aa.com用iframe新增到 www.aa.com的某個頁面下,在www.aa.com和iframe裡面都加上document.domain = "aa.com",這樣就可以統一域了,可以實現跨域訪問。就和平時同乙個域中鑲嵌iframe一樣,直接呼叫裡面的js就可以了。(這個辦法我沒有嘗試,不過理論可行)
三、這種情形是最經常遇到的,也是用的最多的了。就是www.aa.com和www.bb.com你只能修改乙個,也就是另外乙個是別人的,人家告訴你你要取得資料就訪問某某連線引數是什麼樣子的,最後返回資料是什麼格式的。而你需要做的就是在你的域下新建乙個網頁,讓伺服器去別人的**上取得資料,再返回給你。domain1下的a向同域下的getdata.aspx請求資料,getdata.aspx向domain2下的 responsedata.aspx傳送請求,responsedata.aspx返回資料給getdata.aspx, getdata.aspx再返回給a,這樣就完成了一次資料請求。getdata.aspx在其中充當了**的作用。具體可以看下我的**。
四、這個和上個的區別就是請求是使用標籤來請求的,這個要求也是兩個域都是由你來開發才行。原理就是js檔案注入,在本域內的a 內生成乙個js標籤,它的src指向請求的另外乙個域的某個頁面b,b返回資料即可,可以直接返回js的**。因為script的src屬性是可以跨域的。具體看**,這個也比較簡單。
code:
(csdn不能貼上附件麼?)
總結:第一種情況:域和子域的問題,可以完全解決互動。
第二種情況:跨域,實現過程非常麻煩,需要兩個域開發者都能控制,適用於簡單互動。
第三種情況:跨域,開發者只控制乙個域即可,實現過程需要增加**取得資料,是常用的方式。
第四種情況:跨域,兩個域開發者都需要控制,返回一段js**。
ps:**自己按照情況修改即可。
跨域和跨視窗通訊
同源政策 協議相同,埠號相同,網域名稱相同 不同源限制 1.cookie,localstroge,indexdb不能訪問 2.dom iframe不同視窗不能訪問到dom 3.ajax不能請求 規避方法 1.跨域視窗通訊 片段識別符 通過改變子視窗的hash值,把資訊放到hash值上,然後子視窗會監...
同源和跨域
同源機制指的是乙個指令碼不可以請求與它不同域下的資源,非同源的請求就是跨域的請求,其實只要協議 網域名稱 埠有乙個不同,就算跨域。這種機制是為了防止出現盜鏈 乙個站點的網頁引用其它 的諸如的資源。或者將銀行網頁掛到自己的網頁上得到假的網銀賬戶頁面,以此竊取賬戶資訊 iframe 但是有很多情況需要跨...
跨域共享cookie和跨域共享session
的父網域名稱.cookie4可以被提交,因為domain和cookie都嚴格保持一致.這裡需要注意的是,在瀏覽器看來.www.vinceruan.info不是blog.vinceruan.info 的父網域名稱,而vinceruan.info才是blog.vinceruan.info的父網域名稱,w...