js實現(xiàn)跨域訪問的三種方法
javascript跨域訪問是web開發(fā)者經(jīng)常遇到的問題,什么是跨域,一個域上加載的腳本獲取或操作另一個域上的文檔屬性,下面將列出三種實現(xiàn)javascript跨域方法:
1.基于iframe實現(xiàn)跨域
基于iframe實現(xiàn)的跨域要求兩個域具有aa.xx.com,bb.xx.com這種特點,也就是兩個頁面必須屬于一個基礎(chǔ)域(例如都是xxx.com,或是xxx.com.cn),使用同一協(xié)議(例如都是 http)和同一端口(例如都是80),這樣在兩個頁面中同時添加document.domain,就可以實現(xiàn)父頁面調(diào)用子頁面的函數(shù),代碼如下:
頁面一:
<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>
頁面二:
<html> <head> <script> document.domain = "xx.com"; function a(){ alert("c"); } </script> </head> <body> </body> </html>
這時候父頁面就可以調(diào)用子頁面的a函數(shù),實現(xiàn)js跨域訪問
2.基于script標(biāo)簽實現(xiàn)跨域
script標(biāo)簽本身就可以訪問其它域的資源,不受瀏覽器同源策略的限制,可以通過在頁面動態(tài)創(chuàng)建script標(biāo)簽,代碼如下:
var script = document.createElement('script'); script.src = "http://aa.xx.com/js/*.js"; document.body.appendChild(script);
這樣通過動態(tài)創(chuàng)建script標(biāo)簽就可以加載其它域的js文件,然后通過本頁面就可以調(diào)用加載后js文件的函數(shù),這樣做的缺陷就是不能加載其它域的文檔,只能是js文件,jsonp便是通過這種方式實現(xiàn)的,jsonp通過向其它域傳入一個callback參數(shù),通過其他域的后臺將callback參數(shù)值和json串包裝成javascript函數(shù)返回,因為是通過script標(biāo)簽發(fā)出的請求,瀏覽器會將返回來的字符串按照javascript進(jìn)行解析執(zhí)行,實現(xiàn)了域與域之間的數(shù)據(jù)傳輸。
jquery中對jsonp的支持也是基于此方案。
3.后臺代理方式
這種方式可以解決所有跨域問題,也就是將后臺作為代理,每次對其它域的請求轉(zhuǎn)交給本域的后臺,本域的后臺通過模擬http請求去訪問其它域,再將返回的結(jié)果返回給前臺,這樣做的好處是,無論訪問的是文檔,還是js文件都可以實現(xiàn)跨域。
以上js實現(xiàn)跨域訪問的三種方法分先給大家,大家仔細(xì)研究學(xué)習(xí),一定會有所收獲
- 利用nginx解決cookie跨域訪問的方法
- 用jQuery與JSONP輕松解決跨域訪問的問題
- jQuery 跨域訪問問題解決方法
- Ajax實現(xiàn)跨域訪問的三種方法
- Javascript 跨域訪問解決方案
- js iframe跨域訪問(同主域/非同主域)分別深入介紹
- Ajax 設(shè)置Access-Control-Allow-Origin實現(xiàn)跨域訪問
- jquery下利用jsonp跨域訪問實現(xiàn)方法
- JQuery Ajax 跨域訪問的解決方案
- AJAX javascript的跨域訪問執(zhí)行
- 解決AJAX中跨域訪問出現(xiàn)''沒有權(quán)限''的錯誤
- 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ù)創(chuàng)建form表單在FireFox中遇到的問題
在一個前端頁面上,需要通過JavaScript來提交參數(shù),使用JS創(chuàng)建form表單,將參數(shù)append到表單中進(jìn)行提交,接下來將介紹如何操作與實現(xiàn)2013-01-01論Bootstrap3和Foundation5網(wǎng)格系統(tǒng)的異同
這篇文章主要介紹了Bootstrap3和Foundation5網(wǎng)格系統(tǒng),網(wǎng)格的基本構(gòu)造,如何構(gòu)建的,描述它們的主要部件,以及它們對不同屏幕的大小表現(xiàn)出的差異,感興趣的小伙伴們可以參考一下2016-05-05JS實現(xiàn)網(wǎng)頁游戲中滑塊響應(yīng)鼠標(biāo)點擊移動效果
這篇文章主要介紹了JS實現(xiàn)網(wǎng)頁游戲中滑塊響應(yīng)鼠標(biāo)點擊移動效果,涉及JavaScript針對頁面鼠標(biāo)事件、滾動事件及元素屬性等相關(guān)操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-10-10JavaScript垃圾回收機制(引用計數(shù),標(biāo)記清除,性能優(yōu)化)
這篇文章主要介紹了JavaScript垃圾回收機制(引用計數(shù),標(biāo)記清除,性能優(yōu)化),垃圾回收是JavaScript的隱藏機制,我們通常無需為垃圾回收勞心費力,只需要專注功能的開發(fā)就好了2022-07-07使用JavaScript實現(xiàn)node.js中的path.join方法
Node.JS中的 path.join 非常方便,能直接按相對或絕對合并路徑,有時侯前端也需要這種方法,如何實現(xiàn)呢?感興趣的朋友跟隨腳本之家小編一起看看吧2018-08-08