假設頁面和屬於不同域,a頁面請求b頁面的內容.
利用document.domain實現跨域的前提是這兩個網域名稱必須屬於同乙個基礎網域名稱,協議埠都要一致。主要是父域和子域之間的通訊
此時雖然能正確得到window.name
的值,但是由於每次iframe.src
的載入都執行iframe.onload
,迴圈執行,頁面迴圈重新整理,解決辦法:
document.body.a(iframe)將要從b頁面獲取的值設定成b的window.name
,然後從b頁面載入a頁面window.locattion=''
,同樣獲取window.name
,即是b頁面設定的值。
原理:iframe的跨域能力及window.name在頁面重新整理後依舊存在。
postmessage(data,origin)
data
表示要傳遞的資料,部分瀏覽器只能處理字串引數,可用json.stringify
將物件序列化。
origion
:目標視窗的源,協議主機埠號,也可設為*,即傳遞給任意視窗。
在index.html中,主頁面向iframe傳送請求:
window.onload=function()
//主頁面接受iframe傳來的訊息
window.addeventlistener('message',function(e))
lslib.html:
//iframe接受訊息,向主頁面反饋資訊:
window.addeventlistener('message',function(e),false);
要獲取不同域上的json物件,假設為a.html頁面不同域上的json物件。要在a中引用data.php裡面返回的資料可在a中這樣寫:
function dosomething(data)
也可以用jquery封裝好的函式:
$.getjson("?callback=?",function(data))
針對jsonp的另乙個例子
function handleresponse(response)
var script = document.createelement('script');
script.src = "";
document.head.a(script);
輸出:210.74.131.196 ,因為的頁面內容是:
然而jsonp
跨域可能造成xss
攻擊,因此客戶端接收callback引數時,若其中包含惡意標籤(script
)則可能存在風險,解決辦法在伺服器端用encodeuri
對callback引數進行編碼,客戶端再用decodeuricomponent
解碼。
與伺服器進行簡單單向通訊,乙個網頁可以載入任意網頁上的
定義一種跨域資源訪問機制,基本思想是伺服器傳送乙個http響應表頭
假設www.a.com
要從www.b.com
上請求資料。因為跨域所以響應失敗,可在www.b.com
中添加
header('access-control-allow-origin:www.a.com')
則可接受www.a.com
的請求,header('access-control-allow-origin:*')
表示接受所有請求
js跨域 ajax跨域 跨域方式(前端)
跨域方式 cors 跨域資源共享 當使用xmlhttprequest傳送請求時,瀏覽器會自動加上乙個請求頭 origin,後端在接受到請求後確定響應後會在response headers中加入乙個屬性 access control allow origin,值就是發起請求的源位址 瀏覽器得到響應會進...
跨域 同源策略
為了保護智財權,不然你做的介面別人 都隨便用了 是瀏覽器拒絕的 一般有三種方法,哪三種方法呢?是下面三種方法 function handledata data 把callback handledata發給伺服器,伺服器拿到handledataconst http callback就是 後面的fn,因...
前端跨域問題
雖然羅列這麼多,但是我只用過一種 1 jsonp 2 document.domain iframe 3 location.hash iframe 4 window.name iframe 5 postmessage 6 跨域資源共享 cors 7 nginx 8 nodejs中介軟體 9 webso...