电竞比分网-中国电竞赛事及体育赛事平台

分享

三種方法實現js跨域訪問

 quasiceo 2014-05-15
   javascript跨域訪問是web開發(fā)者經常遇到的問題,什么是跨域,一個域上加載的腳本獲取或操作另一個域上的文檔屬性,下面將列出三種實現javascript跨域方法:

1.基于iframe實現跨域

     基于iframe實現的跨域要求兩個域具有aa.,bb.這種特點,也就是兩個頁面必須屬于一個基礎域(例如都是x,或是x.cn),使用同一協議(例如都是 http)和同一端口(例如都是80),這樣在兩個頁面中同時添加document.domain,就可以實現父頁面調用子頁面的函數,代碼如下:
頁面一:

Html代碼  收藏代碼
  1. <html>  
  2. <head>  
  3.   <script>  
  4.    document.domain = "";  
  5.     function aa(){  
  6.       alert("p");  
  7.    }  
  8.   </script>  
  9. </head>  
  10. <body>  
  11.    <iframe src="http://localhost:8080/CmsUI/2.html" id="i">  
  12.      
  13.    </iframe>  
  14.    <script>  
  15.   document.getElementById('i').onload = function(){  
  16.      var d = document.getElementById('i').contentWindow;  
  17.      d.a();  
  18.        
  19.  };  
  20.    </script>  
  21.  </body>  
  22. </html>  

頁面二:
Html代碼  收藏代碼
  1. <html>  
  2.  <head>  
  3.   <script>  
  4.     document.domain = "";  
  5.     function a(){  
  6.     alert("c");  
  7.      }  
  8.   </script>  
  9.  </head>  
  10.  <body>  
  11.  </body>  
  12. </html>  

這時候父頁面就可以調用子頁面的a函數,實現js跨域訪問

2.基于script標簽實現跨域

     script標簽本身就可以訪問其它域的資源,不受瀏覽器同源策略的限制,可以通過在頁面動態(tài)創(chuàng)建script標簽,代碼如下:

Java代碼  收藏代碼
  1. var script = document.createElement('script');  
  2. script.src = "http://aa./js/*.js";  
  3. document.body.appendChild(script);  


     這樣通過動態(tài)創(chuàng)建script標簽就可以加載其它域的js文件,然后通過本頁面就可以調用加載后js文件的函數,這樣做的缺陷就是不能加載其它域的文檔,只能是js文件,jsonp便是通過這種方式實現的,jsonp通過向其它域傳入一個callback參數,通過其他域的后臺將callback參數值和json串包裝成javascript函數返回,因為是通過script標簽發(fā)出的請求,瀏覽器會將返回來的字符串按照javascript進行解析執(zhí)行,實現了域與域之間的數據傳輸。
jquery中對jsonp的支持也是基于此方案。

3.后臺代理方式

     這種方式可以解決所有跨域問題,也就是將后臺作為代理,每次對其它域的請求轉交給本域的后臺,本域的后臺通過模擬http請求去訪問其它域,再將返回的結果返回給前臺,這樣做的好處是,無論訪問的是文檔,還是js文件都可以實現跨域。

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發(fā)現有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多