js實(shí)現(xiàn)跨域訪問的三種方法
javascript跨域訪問是web開發(fā)者經(jīng)常遇到的問題,什么是跨域,一個(gè)域上加載的腳本獲取或操作另一個(gè)域上的文檔屬性,下面將列出三種實(shí)現(xiàn)javascript跨域方法:
1.基于iframe實(shí)現(xiàn)跨域
基于iframe實(shí)現(xiàn)的跨域要求兩個(gè)域具有aa.xx.com,bb.xx.com這種特點(diǎn),也就是兩個(gè)頁(yè)面必須屬于一個(gè)基礎(chǔ)域(例如都是xxx.com,或是xxx.com.cn),使用同一協(xié)議(例如都是 http)和同一端口(例如都是80),這樣在兩個(gè)頁(yè)面中同時(shí)添加document.domain,就可以實(shí)現(xiàn)父頁(yè)面調(diào)用子頁(yè)面的函數(shù),代碼如下:
頁(yè)面一:
<html>
<head>
<script>
document.domain = "xx.com";
function aa(){
alert("p");
}
</script>
</head>
<body>
<iframe src="http://localhost:8080/CmsUI/2.html" id="i">
</iframe>
<script>
document.getElementById('i').onload = function(){
var d = document.getElementById('i').contentWindow;
d.a();
};
</script>
</body>
</html>
頁(yè)面二:
<html>
<head>
<script>
document.domain = "xx.com";
function a(){
alert("c");
}
</script>
</head>
<body>
</body>
</html>
這時(shí)候父頁(yè)面就可以調(diào)用子頁(yè)面的a函數(shù),實(shí)現(xiàn)js跨域訪問
2.基于script標(biāo)簽實(shí)現(xiàn)跨域
script標(biāo)簽本身就可以訪問其它域的資源,不受瀏覽器同源策略的限制,可以通過在頁(yè)面動(dòng)態(tài)創(chuàng)建script標(biāo)簽,代碼如下:
var script = document.createElement('script');
script.src = "http://aa.xx.com/js/*.js";
document.body.appendChild(script);
這樣通過動(dòng)態(tài)創(chuàng)建script標(biāo)簽就可以加載其它域的js文件,然后通過本頁(yè)面就可以調(diào)用加載后js文件的函數(shù),這樣做的缺陷就是不能加載其它域的文檔,只能是js文件,jsonp便是通過這種方式實(shí)現(xiàn)的,jsonp通過向其它域傳入一個(gè)callback參數(shù),通過其他域的后臺(tái)將callback參數(shù)值和json串包裝成javascript函數(shù)返回,因?yàn)槭峭ㄟ^script標(biāo)簽發(fā)出的請(qǐng)求,瀏覽器會(huì)將返回來的字符串按照javascript進(jìn)行解析執(zhí)行,實(shí)現(xiàn)了域與域之間的數(shù)據(jù)傳輸。
jquery中對(duì)jsonp的支持也是基于此方案。
3.后臺(tái)代理方式
這種方式可以解決所有跨域問題,也就是將后臺(tái)作為代理,每次對(duì)其它域的請(qǐng)求轉(zhuǎn)交給本域的后臺(tái),本域的后臺(tái)通過模擬http請(qǐng)求去訪問其它域,再將返回的結(jié)果返回給前臺(tái),這樣做的好處是,無論訪問的是文檔,還是js文件都可以實(shí)現(xiàn)跨域。
以上js實(shí)現(xiàn)跨域訪問的三種方法分先給大家,大家仔細(xì)研究學(xué)習(xí),一定會(huì)有所收獲
- 利用nginx解決cookie跨域訪問的方法
- 用jQuery與JSONP輕松解決跨域訪問的問題
- jQuery 跨域訪問問題解決方法
- Ajax實(shí)現(xiàn)跨域訪問的三種方法
- Javascript 跨域訪問解決方案
- js iframe跨域訪問(同主域/非同主域)分別深入介紹
- Ajax 設(shè)置Access-Control-Allow-Origin實(shí)現(xiàn)跨域訪問
- jquery下利用jsonp跨域訪問實(shí)現(xiàn)方法
- JQuery Ajax 跨域訪問的解決方案
- AJAX javascript的跨域訪問執(zhí)行
- 解決AJAX中跨域訪問出現(xiàn)''沒有權(quán)限''的錯(cuò)誤
- Python的Django應(yīng)用程序解決AJAX跨域訪問問題的方法
- AJAX的跨域訪問-兩種有效的解決方法介紹
- 深入淺析同源策略和跨域訪問
- 關(guān)于Iframe如何跨域訪問Cookie和Session的解決方法
- AJax與Jsonp跨域訪問問題小結(jié)
- jquery 跨域訪問問題解決方法(筆記)
- 淺談Ajax跨域Session和跨域訪問
- 解決nginx/apache靜態(tài)資源跨域訪問問題詳解
相關(guān)文章
js實(shí)現(xiàn)Form欄顯示全格式時(shí)間時(shí)鐘效果代碼
這篇文章主要介紹了js實(shí)現(xiàn)Form欄顯示全格式時(shí)間時(shí)鐘效果代碼,可讀取當(dāng)前的完整時(shí)間并實(shí)時(shí)顯示,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-08-08
JavaScript必看的10道面試題總結(jié)(推薦)
JavaScript 已經(jīng)成為全棧開發(fā)技能的基石,在全棧開發(fā)面試中都會(huì)不可避免地涉及到與 JavaScript 有關(guān)的問題。這篇文章主要給大家介紹了關(guān)于JavaScript必看的10道面試題,需要的朋友可以參考下2021-05-05
jQuery實(shí)現(xiàn)頁(yè)面頂部下拉廣告
本文主要分享了jQuery實(shí)現(xiàn)頁(yè)面頂部下拉廣告的具體代碼。具有一定的參考價(jià)值,下面跟著小編一起來看下吧2016-12-12
js學(xué)習(xí)總結(jié)之DOM2兼容處理this問題的解決方法
這篇文章主要為大家詳細(xì)介紹了js學(xué)習(xí)總結(jié)之DOM2兼容處理this問題的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07

