时间:2021-07-01 10:21:17 帮助过:12人阅读
<p style="width:200px; float:left; margin-right:200px;border:solid 1px #333;"> <p id="color">Frame Color</p> </p> <p> <iframe id="child" src="http://lsLib.com/lsLib.html"></iframe> </p>
我们可以在http://www.gxlcms.com/通过postMessage()方法向跨域的iframe页面http://www.gxlcms.com/传递消息
接收消息
test.com上面的页面向lslib.com发送了消息,那么在lslib.com页面上如何接收消息呢,监听window的message事件就可以
http://www.gxlcms.com/
这样我们就可以接收任何窗口传递来的消息了,为了安全起见,我们利用这时候的MessageEvent对象判断了一下消息源,MessageEvent是一个这样的东东
有几个重要属性
1.data:顾名思义,是传递来的message
2.source:发送消息的窗口对象
3.origin:发送消息窗口的源(协议+主机+端口号)
这样就可以接收跨域的消息了,我们还可以发送消息回去,方法类似
简单的demo
在这个例子中,左边的p会根据右边iframe内p颜色变化而变化
在例子中页面加载的时候主页面向iframe发送’getColor‘ 请求(参数没实际用处)
iframe接收消息,并把当前颜色发送给主页面呢
主页面接收消息,更改自己p颜色
当点击iframe事触发其变色方法,把最新颜色发送给主页面
主页面还是利用刚才监听message事件的程序处理自身变色
最后
很简单的用法却解决了大问题,据说Facebook已经在使用了,而且这也是html5另一个API——web workers传递消息的方法,那么它的浏览器兼容性怎么样呢?所谓浏览器兼容性几乎变成了IE几开始支持的问题了。。。不过好消息是跟localStorage一样,IE8+都支持了,只不过有些浏览器的低版本(比如FireFox4.0)并不支持window.onmessage=function(){}这种写法,所以我么最好使用事件绑定的写法,为了兼容IE,也要判断是否支持addEventListener。
以上就是html5 postMessage解决跨域、跨窗口消息传递方案 的内容,更多相关内容请关注PHP中文网(www.gxlcms.com)!