1. 程式人生 > >H5的postMessage解決跨域問題

H5的postMessage解決跨域問題

為了解決的問題:

1、頁面與其它視窗的資料傳遞

2、頁面與巢狀的iframe的資料傳遞

3、跨域資料傳遞

HTML5引入了message的API,使用postMessage()方法可以允許來自不同域的指令碼非同步方式通訊,可以實現跨文字檔、多視窗、跨域的訊息傳遞

引數

postMessage(data, origin)

data:需要傳遞的資料,因為部分瀏覽器只能處理字串型別,所以需要JSON.stringify序列化一下

origin:字串,指明目標視窗的源,也可以設定為*,即表示不限制,當然,為了安全考慮,建議設定

例子:

//假設訪問地址是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', '*');
})
注意:有些瀏覽器不支援window.onmessage=function(){}這種寫法,為了相容IE,也要判斷是否支援addEventListener

參考連結: