H5的postMessage解決跨域問題
阿新 • • 發佈:2019-01-29
為了解決的問題:
1、頁面與其它視窗的資料傳遞
2、頁面與巢狀的iframe的資料傳遞
3、跨域資料傳遞
HTML5引入了message的API,使用postMessage()方法可以允許來自不同域的指令碼非同步方式通訊,可以實現跨文字檔、多視窗、跨域的訊息傳遞
引數
postMessage(data, origin)
data:需要傳遞的資料,因為部分瀏覽器只能處理字串型別,所以需要JSON.stringify序列化一下
origin:字串,指明目標視窗的源,也可以設定為*,即表示不限制,當然,為了安全考慮,建議設定
例子:
注意:有些瀏覽器不支援window.onmessage=function(){}這種寫法,為了相容IE,也要判斷是否支援addEventListener//假設訪問地址是http://test.com/index.html <div> <iframe id="child" src="http://kong.com/index.html" /> </div> //在test中向跨域的子頁面iframe傳遞資訊 window.onload = function(){ window.frames[0].postMessage('getInfo', 'http://kong.com') } //子頁面即kong.com接收訊息 window.addEventListener('message', function(e){ //e物件包含了傳送源的一些資訊,為了安全起見,可以處理下資料來源方的判斷 if(e.source !== window.parent){ return; } alert(e.data); window.parent.postMessage('ok', '*'); })
參考連結: