跨域代碼總結(jié)

一齿穗,常用的jsonp跨域
1傲隶,在瀏覽器里面能拼得出來,但是正常代碼請求返回如下:故代碼不同源窃页,需要進行跨域請求

Paste_Image.png
1跺株,jsonp                                      只能get請求
2复濒,document.domain +iframe          主域相同子域不同
3,windows.name  +iframe         不同頁面不同域名都可以乒省,且name可以支持非常長的String值
4芝薇,cors                              服務(wù)器端處理
5,location.hash +iframe         不分作儿,利用代理
6,HTML postMessage              支持度挺高的 

跨域請求方式如下:

1洛二,jsonp請求

注意:jsonp是利用src不受同源策略影響來實現(xiàn)的,src只能get請求方式
不能解決不同域的兩個頁面之間的如何進行JavaScript調(diào)用的問題

使用ajax調(diào)用jsonp
 <!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>JSONP實現(xiàn)跨域2</title>
</head>
<body>
    <div id="mydiv">
        <button id="btn">點擊</button>
    </div>
</body>
<script type="text/javascript">
    function handleResponse(response){
            console.log(response);
    }
</script>
<script type="text/javascript">
    window.onload = function() {

    var oBtn = document.getElementById('btn');

    oBtn.onclick = function() {     

        var script = document.createElement("script");
        script.src = "https://api.douban.com/v2/book/search?q=javascript&count=1&callback=handleResponse";
        document.body.insertBefore(script, document.body.firstChild);   
使用jquery的$ajax()
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jQuery實現(xiàn)JSONP</title>
</head>
<body>
    <div id="mydiv">
        <button id="btn">點擊</button>
    </div>
</body>
<script type="text/javascript" src="https://code.jquery.com/jquery-3.1.0.min.js"></script>
<script type="text/javascript">
    $(function(){
        $("#btn").click(function(){

            $.ajax({
                async : true,
                url : "https://api.douban.com/v2/book/search",
                type : "GET",
                dataType : "jsonp", // 返回的數(shù)據(jù)類型攻锰,設(shè)置為JSONP方式
                jsonp : 'callback', //指定一個查詢參數(shù)名稱來覆蓋默認的 jsonp 回調(diào)參數(shù)名 callback
                jsonpCallback: 'handleResponse', //設(shè)置回調(diào)函數(shù)名
                data : {
                    q : "javascript", 
                    count : 1
                }, 
                success: function(response, status, xhr){
 console.log('狀態(tài)為:' + status + ',狀態(tài)是:' + xhr.statusText);
                    console.log(response);
                }
            });
        });
    });
</script>
</html>
通過getJSON()來實現(xiàn)jsonp跨域
$.getJSON("https://api.douban.com/v2/book/search?q=javascript&count=1&callback=?", function(data){
                console.log(data);
            });

2晾嘶,主域相同,子域不同娶吞,document.domain + iframe

注意:形式可以是一個頁面里面嵌套iframe(另一個頁面或者域之間的數(shù)據(jù)通信)
實現(xiàn)方式如下:可以把2個界面的document.domain設(shè)置成一樣的垒迂,但是只能設(shè)置成本身,后者更高一級的父域才行妒蛇。

  在頁面(http://www.damonare.cn/a.html) 中設(shè)置document.domain:

<iframe id = "iframe" src="http://damonare.cn/b.html" onload = "test()"></iframe>
<script type="text/javascript">
    document.domain = 'damonare.cn';//設(shè)置成主域
    function test(){
        alert(document.getElementById('iframe').contentWindow);//contentWindow 可取得子窗口的 window 對象
    }
</script>
------------------------------------------------------------------
在頁面(http://damonare.cn/b.html) 中也設(shè)置document.domain:

<script type="text/javascript">
    document.domain = 'damonare.cn';//在iframe載入這個頁面也設(shè)置document.domain机断,使之與主頁面的document.domain相同
</script>

3,通過location.hash + + iframe跨域

主域不同

4绣夺,通過HTML5的postMessage方法跨域

兩個頁面之間的通信

A頁面通過postMessage方法發(fā)送消息:

window.onload = function() {  
    var ifr = document.getElementById('ifr');  
    var targetOrigin = "http://www.google.com";  
    ifr.contentWindow.postMessage('hello world!', targetOrigin);  
};
B頁面通過message事件監(jiān)聽并接受消息:

var onmessage = function (event) {  
  var data = event.data;//消息  
  var origin = event.origin;//消息來源地址  
  var source = event.source;//源Window對象  
  if(origin=="http://www.baidu.com"){  
console.log(data);//hello world!  
  }  
};  
if (typeof window.addEventListener != 'undefined') {  
  window.addEventListener('message', onmessage, false);  
} else if (typeof window.attachEvent != 'undefined') {  
  //for ie  
  window.attachEvent('onmessage', onmessage);  
}

5吏奸,使用 CORS跨域

瀏覽器和服務(wù)器之間的通信,思想就是使用自定義HTTP頭部讓瀏覽器和服務(wù)器進行通信

平時正常寫代碼
<script type="text/javascript">
    var xhr = new XMLHttpRequest();
    xhr.open("GET", "http://segmentfault.com/u/trigkit4/",true);
    xhr.send();
</script>
服務(wù)器設(shè)置請求頭:Access-Control-Allow-Origin啟用CORS陶耍。
Access-Control-Allow-Origin:*//或者是通配符
兼容:IE10+
 

6奋蔚,使用windows.name + + iframe跨域

** windows都有一個name屬性,在頁面載入期間烈钞,都是共享應(yīng)name屬性**

比如:我們在任意一個頁面輸入
window.name = "My window's name";
setTimeout(function(){
    window.location.;
},1000)
--------------------------
進入damonare.cn頁面后我們再檢測再檢測 window.name :
window.name; // My window's name
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末泊碑,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子毯欣,更是在濱河造成了極大的恐慌馒过,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件酗钞,死亡現(xiàn)場離奇詭異腹忽,居然都是意外死亡,警方通過查閱死者的電腦和手機算吩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進店門留凭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人偎巢,你說我怎么就攤上這事蔼夜。” “怎么了压昼?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵求冷,是天一觀的道長瘤运。 經(jīng)常有香客問我,道長匠题,這世上最難降的妖魔是什么拯坟? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮韭山,結(jié)果婚禮上郁季,老公的妹妹穿的比我還像新娘。我一直安慰自己钱磅,他們只是感情好梦裂,可當我...
    茶點故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著盖淡,像睡著了一般年柠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上褪迟,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天冗恨,我揣著相機與錄音,去河邊找鬼味赃。 笑死掀抹,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的洁桌。 我是一名探鬼主播渴丸,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼另凌!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起戒幔,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤吠谢,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后诗茎,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體工坊,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年敢订,在試婚紗的時候發(fā)現(xiàn)自己被綠了王污。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡楚午,死狀恐怖昭齐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情矾柜,我是刑警寧澤阱驾,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布就谜,位于F島的核電站,受9級特大地震影響里覆,放射性物質(zhì)發(fā)生泄漏丧荐。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一喧枷、第九天 我趴在偏房一處隱蔽的房頂上張望虹统。 院中可真熱鬧,春花似錦隧甚、人聲如沸窟却。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽夸赫。三九已至,卻和暖如春咖城,著一層夾襖步出監(jiān)牢的瞬間茬腿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工宜雀, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留切平,地道東北人。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓辐董,卻偏偏與公主長得像悴品,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子简烘,可洞房花燭夜當晚...
    茶點故事閱讀 43,543評論 2 349

推薦閱讀更多精彩內(nèi)容

  • 前言 關(guān)于前端跨域的解決方法的多種多樣實在讓人目不暇接苔严。以前碰到一個公司面試的場景是這樣的,好幾個人一起在等待面試...
    andreaxiang閱讀 473評論 1 4
  • 1. 什么是跨域孤澎? 跨域一詞從字面意思看届氢,就是跨域名嘛,但實際上跨域的范圍絕對不止那么狹隘覆旭。具體概念如下:只要協(xié)議...
    w_zhuan閱讀 512評論 0 0
  • 1. 什么是跨域退子? 跨域一詞從字面意思看,就是跨域名嘛型将,但實際上跨域的范圍絕對不止那么狹隘寂祥。具體概念如下:只要協(xié)議...
    他在發(fā)呆閱讀 822評論 0 0
  • 前言相信每一個前端er對于跨域這兩個字都不會陌生,在實際項目中應(yīng)用也是比較多的七兜。但跨域方法的多種多樣實在讓人目不暇...
    Www劉閱讀 668評論 2 23
  • “來書云:日用功夫中是立志……離群索居之人丸凭,當更有何法以處之?”≈椋“工夫大略亦只是如此用忧换,只要無間斷,得到純熟后向拆,...
    小岳1579閱讀 633評論 0 0