Html5的iframe不兼容php,如何使用html5 PostMessage解决iframe完全跨域的问题

在开发中引用iframe页面是常见的,但是iframe完全跨域同时能够操作引入的iframe跨域页面中元素却很少见。

使用的场景有可能是:1.页面和其打开的新窗口的数据传递。

2.多窗口之间消息传递。

3.页面与嵌套的iframe消息传递。

此时,就牵扯到iframe完全跨域的问题。

这里介绍一个方法html5 PostMessage方法,html5引入的message的API可以更方便、有效、安全的解决这些难题。postMessage()方法允许来自不同源的脚本采用异步方式进行有限的通信,可以实现跨文本档、多窗口、跨域消息传递。

一、postMessage()的介绍?语法:

postMessage(data,origin)

参数描述

data要传递的数据,html5规范中提到该参数可以是JavaScript的任意基本类型或可复制的对象,然而并不是所有浏览器都做到了这点儿,部分浏览器只能处理字符串参数,所以我们在传递参数的时候需要使用JSON.stringify()方法对对象参数序列化,在低版本IE中引用json2.js可以实现类似效果。

origin字符串参数,指明目标窗口的源,协议+主机+端口号[+URL],URL会被忽略,所以可以不写,这个参数是为了安全考虑,postMessage()方法只会将message传递给指定窗口,当然如果愿意也可以建参数设置为"*",这样可以传递给任意窗口,如果要指定和当前窗口同源的话设置为"/"。

二、如何通过PostMessage()实现iframe完全跨域。

我这里使用127.0.0.1 和 localhost 模拟两个域名。

a页面代码如下:html>

html5 PostMessage 演示实例

点我传值给B域名下的页面

function setmsgb(){

window.frames[0].postMessage('setmsga','http://localhost');

}

window.addEventListener('message',function(e){

alert(e.data);

},false);

b页面代码如下:html>

我是b页面

点我传值给A域名下页面

// 接收判断是不是a页面传递过来的值

window.addEventListener('message',function(e){

alert('A域名下页面传递的值为'+e.data);

},false);

// 函数

function setmsga () {

window.parent.postMessage('我是B域名下页面传过来的','*');

}

最后的演示效果如下:

3fa26e19f52a514de10871a7e6a20363.png

9ba824bb5e3cc9208445f6492feefda5.png

通过上面的演示,很直接的看到我们两个域名直接 的通信成功了。

那么它的浏览器兼容性怎么样呢?

所谓浏览器兼容性几乎变成了IE几开始支持的问题了,不过好消息是跟localStorage一样,IE8+都支持了,所以最好使用事件绑定的写法,为了兼容IE,也要判断是否支持addEventListener。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值