這篇文章主要介紹怎么解決js跨域問題,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
專注于為中小企業(yè)提供做網(wǎng)站、網(wǎng)站設(shè)計(jì)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)忻州免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了成百上千家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
Js跨域問題是web開發(fā)人員最常碰到的一個(gè)問題之一。所謂js跨域問題,是指在一個(gè)域下的頁面中通過js訪問另一個(gè)不同域下的數(shù)據(jù)對(duì)象,出于安全性考 慮,幾乎所有瀏覽器都不允許這種跨域訪問,這就導(dǎo)致在一些ajax應(yīng)用中,使用跨域的web service會(huì)成為一個(gè)問題。 解決js跨域問題,目前在客戶端和服務(wù)端都有一些現(xiàn)成的解決方案,但這些方案并不能解決所有問題。下面我們先來看下有哪些常用的解決方案,并針對(duì)空間產(chǎn)品 對(duì)跨域問題的需求給出一個(gè)space自己的解決方案,希望能對(duì)其他產(chǎn)品組有借鑒意義。
客戶端解決方案
如何在客戶端解決js跨域問題幾乎是所有web開發(fā)人員會(huì)首先考慮的。目前最常用的方法有2種:設(shè)置document.domain、通過script 標(biāo)簽加載。
設(shè)置document.domain
采用這種方法的前提是跨域請(qǐng)求涉及的兩個(gè)頁面必須屬于一個(gè)基礎(chǔ)域(例如都是xxx.com,或是xxx.com.cn),使用同一協(xié)議(例如都是 http)和同一端口(例如都是80)。例如,aaa.xxx.com里面的一個(gè)頁面需要調(diào)用bbb.xxx.com里的一個(gè)對(duì)象,則將兩個(gè)頁面的 document.domain都設(shè)置為xxx.com,就可以實(shí)現(xiàn)跨域調(diào)用了。 另外,需要注意的是,這種方式只能用在父、子頁面之中,即只有在用iframe進(jìn)行數(shù)據(jù)訪問時(shí)才有用。
通過script標(biāo)簽加載
對(duì)于瀏覽器來說,script標(biāo)簽的src屬性所指向資源就跟img標(biāo)簽的src屬性所指向的資源一樣,都是一個(gè)靜態(tài)資源,瀏覽器會(huì)在適當(dāng)?shù)臅r(shí)候自動(dòng)去加 載這些資源,而不會(huì)出現(xiàn)所謂的跨域問題。這樣我們就可以通過該屬性將要訪問的數(shù)據(jù)對(duì)象引用進(jìn)當(dāng)前頁面而繞過js跨域問題。 例如,在space的我的空間項(xiàng)目中,需要在hi域下管理中心頁面中隨機(jī)推薦幾個(gè)熱門模塊給用戶,由于熱門模塊的相關(guān)信息都在act域下的php模塊中維 護(hù),如果直接在hi域下通過ajax請(qǐng)求去獲取act域下的推薦模塊列表相關(guān)信息就出現(xiàn)js跨域問題。解決這個(gè)問題的最簡(jiǎn)單方法就是,在hi域下通過 script標(biāo)簽去訪問act域提供的這個(gè)http接口: