關於JS的跨域通訊的幾種解決方案

2022-03-31 01:37:32 字數 1894 閱讀 8316

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就可以了。(這個辦法我沒有嘗試,不過理論可行) 

二、當兩個域不同時,如果想相互呼叫,那麼同樣需要兩個域都是由你來開發才可以。用iframe可以實現資料的互相呼叫。解決方案就是用window.location物件的hash屬性。hash屬性就是http://domian/web/a.htm#dshakjdhsjka 裡面的#dshakjdhsjka。利用js改變hash值網頁不會重新整理,可以這樣實現通過js訪問hash值來做到通訊。不過除了ie之外其他大部分瀏覽器只要改變hash就會記錄歷史,你在前進和後退時就需要處理,非常麻煩。不過再做簡單的處理時還是可以用的。大體的過程是頁面a和頁面b在不同域下,b通過iframe新增到a裡,a通過js修改iframe的hash值,b裡面做乙個監聽(因為js只能修改hash,資料是否改變只能由b自己來判斷),檢測到b的hash值被修改了,得到修改的值,經過處理返回a需要的值,再來修改a的hash值(這個地方要注意,如果a 本身是那種查詢頁面的話比如http://domian/web/a.aspx?id=3,在b中直接parent.window.location是無法取得資料的,同樣報沒有許可權的錯誤,需要a把這個傳過來,所以也比較麻煩),同樣a裡面也要做監聽,如果hash變化的話就取得返回的資料,再做相應的處理。 

三、這種情形是最經常遇到的,也是用的最多的了。就是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屬性是可以跨域的。具體看**,這個也比較簡單。 

總結: 

第一種情況:域和子域的問題,可以完全解決互動。 

第二種情況:跨域,實現過程非常麻煩,需要兩個域開發者都能控制,適用於簡單互動。 

第三種情況:跨域,開發者只控制乙個域即可,實現過程需要增加**取得資料,是常用的方式。 

第四種情況:跨域,兩個域開發者都需要控制,返回一段js**。

關於JS的跨域通訊的幾種解決方案

1.什麼引起了ajax不能跨域請求的問題?ajax本身實際上是通過xmlhttprequest物件來進行資料的互動,而瀏覽器出於安全考慮,不允許js 進行跨域操作,所以會警告。2.有什麼完美的解決方案麼?沒有。解決方案有不少,但是只能是根據自己的實際情況來選擇。具體情況有 一 本域和子域的相互訪問 ...

Javascript跨域請求的幾種解決方法

一 window.name 有三個頁面 a.com proxy.html 檔案,一般是乙個沒有任何內容的html檔案,需要和應用頁面在同一域下。b.com data.html 應用頁面需要獲取資料的頁面,可稱為資料頁面。實現起來基本步驟如下 總結起來即 iframe的src屬性由外域轉向本地域,跨域...

js跨域的幾種解決方案

這裡說的js跨域是指通過js在不同的域之間進行資料傳輸或通訊,比如用ajax向乙個不同的域請求資料,或者通過js獲取頁面中不同域的框架中 iframe 的資料。只要協議 網域名稱 埠有任何乙個不同,都被當作是不同的域。下表給出了相對同源檢測的結果 qq截圖20130613230631 要解決跨域的問...