H5的postMessage解决跨域问题

来源:互联网 发布:免费看书软件哪个好 编辑:程序博客网 时间:2024/05/01 01:09

为了解决的问题:

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

参考链接:

http://www.cnblogs.com/dolphinX/p/3464056.html