同源策略:
JS只能與同一個域中的頁面進行通訊,必須是協議、域名、端口都相同,相同域下才能相互通信,這可以被認為是一種通信原則,叫同源策略。
跨域:
js跨域是指通過js在不同的域之間進行數據傳輸或通信,比如用ajax向一個不同的域請求數據,或者通過js獲取頁面中不同域的框架中(iframe)的數據。只要協議、域名、端口有任何一個不同,都被當作是不同的域。
下表給出了相對http://store.company.com/dir/page.html同源檢測的結果:
四種方法解決跨域:
1、jsonp;
jsonp跨域請求類似於ajax的get請求,比如請求地址url= 'localhsot:8080/search.php?callback=getremotedata',注意jsonp后面的callback參數,請求是必帶
2、document.domain;
document.domain也可以解決跨域,不過只能是子域名間的跨域,這個要注意
3、window.name;
先介紹下window.name,window對象有個name屬性,只要是當前頁面載入過的所有頁面都是共享window.name,每個頁面都有對window.name的讀寫權限。其借助iframe中介進行數據通信
4、h5 postMessage
html5提供的方法,缺點是IE8+才支持,主要是通過父子間通過iframe進行相互通訊
建議使用window.name,它沒有瀏覽器兼容性問題,而且使用不復雜,或者用jsonp實現跨域獲取數據,具體的話可以百度搜索案例實際操作下。