js跨域是指通過js在不同的域之間進行數據傳輸或通信,只要協議、域名、端口有任何一個不同,都被當作是不同的域。
舉例: 協議: http/https 域名:主機名 端口 :8080
1.通過jsonp跨域
jsonp是說json格式數據使用的一種方式。
原理是:動態插入script
標簽,通過script
標簽引入一個js
文件,這個js文件載入成功后會執行我們在url參數中指定的函數,並且會把我們需要的json
數據作為參數傳入。jsonp是需要服務器端的頁面進行相應的配合的。
由於同源策略的限制,XmlHttpRequest
只允許請求當前源(域名、協議、端口)的資源,為了實現跨域請求,可以通過script
標簽實現跨域請求,然后在服務端輸出JSON數據並執行回調函數,從而解決了跨域的數據請求。
優點是兼容性好,簡單易用,支持瀏覽器與服務器雙向通信。缺點是只支持GET請求。
jQuery 中 $.getJSON方法會自動判斷是否跨域,不跨域的話,就調用普通的ajax方法;跨域的話,則會以異步加載js文件的形式來調用jsonp的回調函數。
2.document.domain進行跨域
將子域和主域的document.domain
設為同一個主域.這里說的主域和子域說的是不同的頁面。
前提條件:這兩個域名必須屬於同一個基礎域名!而且所用的協議,端口都要一致,否則無法利用document.domain
進行跨域
3.window.name進行跨域
window.name是持久存在一個窗口載入過的所有頁面中的,並不會因新頁面的載入而進行重置。
4.HTML5的window.postMessage
方法來跨域傳送數據
無論這個window對象是屬於同源或不同源,可以使用它來向其它的window對象發送消息。