[轉] 三種方法實現js跨域訪問

1.基於iframe實現跨域 

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

Html代碼    收藏代碼
  1. <html>  
  2. <head>  
  3.   <script>  
  4.    document.domain = "xx.com";  
  5.     function a(){  
  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.aa();  
  18.        
  19.  };  
  20.    </script>  
  21.  </body>  
  22. </html>  


頁面二:  html

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


這時候父頁面就能夠調用子頁面的aa函數,實現js跨域訪問 

2.基於script標籤實現跨域 

     script標籤自己就能夠訪問其它域的資源,不受瀏覽器同源策略的限制,能夠經過在頁面動態建立script標籤,代碼以下: 

java

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


      這樣經過動態建立script標籤就能夠加載其它域的js文件,而後經過本頁面就能夠調用加載後js文件的函數,這樣作的缺陷就是不能加載其它域的文檔,只能是js文件,jsonp即是經過這種方式實現的,jsonp經過向其它域傳入一個callback參數,經過其餘域的後臺將callback參數值和json串包裝成javascript函數返回,由於是經過script標籤發出的請求,瀏覽器會將返回來的字符串按照javascript進行解析執行,實現了域與域之間的數據傳輸。 
jquery中對jsonp的支持也是基於此方案。 

3.後臺代理方式 

     這種方式能夠解決全部跨域問題,也就是將後臺做爲代理,每次對其它域的請求轉交給本域的後臺,本域的後臺經過模擬http請求去訪問其它域,再將返回的結果返回給前臺,這樣作的好處是,不管訪問的是文檔,仍是js文件均可以實現跨域。jquery

相關文章
相關標籤/搜索