出現瀏覽器跨域的原因
瀏覽器的同源策略指的就是協議,域名,埠,三者都相同,如果其中有一個不同就屬于跨域
跨域可能造成的報錯
ajax在不同域名下的請求無法實作

常用的解決跨域的方法
1. JSONP跨域
JSONP(JSON with Padding: 填充式JSON)
JSONP應用的技巧:
在HTML標簽里,一些標簽比如link、href、img這樣的標簽是沒有跨域限制的,
- jsonp如何使用
<body>
<script type="text/javascript">
function func1(ret){
console.log(ret)
}
</script>
<script src="https://www.baidu.com/s?ie=UTF-8&wd=" type="text/javascript" charset="utf-8"></script>
</body>
2. CORS跨域
后端修改請求頭
header(‘Access-Control-Allow-Origin:*’);允許訪問的網址
header(‘Access-Control-Allow-Method:POST,GET’);允許訪問的方式
3. nginx反向代理
www.baidu.com/index.html需要呼叫www.sina.com/server.php,可以寫一個介面www.baidu.com/server.php,由這個介面在后端去呼叫www.sina.com/server.php并拿到回傳值,然后再回傳給index.html
4. postMessage
關鍵點:
postMessage是h5引入的一個新概念,現在也在進一步的推廣和發展中,他進行了一系列的封裝,我們可以通過window.postMessage的方式進行使用,并可以監聽其發送的訊息;
兼容性:
移動端可以放心用,但是pc端需要做降級處理
優點:
不需要后端介入就可以做到跨域,一個函式外加倆個引數(請求url,發送資料)就可以搞定;
移動端兼容性好;
5.通過window.name跨域
window物件有個name屬性,該屬性有個特征:即在一個視窗(window)的生命周期內,視窗載入的所有的頁面都是共享一個window.name的,每個頁面對window.name都有讀寫的權限,window.name是持久存在一個視窗載入過的所有頁面中的,并不會因新頁面的載入而進行重置,
比如:有一個頁面a.html,它里面有這樣的代碼:

再看看b.html頁面的代碼:

轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/274081.html
標籤:其他
下一篇:【JavaP6大綱】Dubbo篇:Dubbo 支持哪些序列化協議?說一下 Hessian 的資料結構?PB 知道嗎?為什么 PB 的效率是最高的?
