使用iframe+postMessage实现页面跨域通信的示例代码
通常情况下,对于两个不同页面的脚本,只有当执行它们的页面位于具有相同的协议(通常为https),端口号(443为https的默认值),以及主机时,这两个脚本才能相互通信。而在实际项目开发过程中,经常会利用iframe在一个父页面中嵌入一个子页面,或者在一个父页面中弹出另一个页面,由于同源策略的限制,父子页面之间的脚本无法实现通信,而使用postMessage方法就实现了父子页面之间的跨域信息传递。
语法
otherWindow.postMessage(message, targetOrigin, [transfer]);
otherWindow:其他页面的引用,例如,iframe的contentWindow属性,或者执行window.open返回的窗口对象。
message:将要传递到另一个页面的数据(可以不受限制的将数据对象安全的传送给目标窗口而无需自己序列化,原因是因为采用了结构化克隆算法)。
targetOrigin:通过窗口的origin属性来指定哪些窗口能接收到消息事件,其值可以是一个字符串""(表示无限制)或者一个Url。只有当目标窗口的协议、主机地址、端口号和targetOrigin完全匹配时,目标窗口才会收到message信息。为了防止信息泄露,通常情况下都会指定特定的url。
transfer可选参数。
使用方法
1.父页面(url为http://.b./main.html)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>父页面</title> </head> <body> <iframe id="child" src="http://.a./iframepage.html"></iframe> <script> window.onload = function(){ document.getElementById("child").contentWindow.postMessage("主页面传递的消息","http://.a./iframepage.html") } window.addEventListener('message', function(event){ //父获取子传递的消息 if(event.origin == "http://.a."){ //可以在这里做一些逻辑操作 } }, false) </script> </body> </html>
2.子页面(url为http://.a./iframepage.html)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>子页面</title> </head> <body> <div>这里是子页面</div> <script> window.addEventListener('message', function(event){ if(event.origin == "http://.b."){ //可以在这里做一些操作 .postMessage("子页面收到父页面传递来的消息", 'http://.b./main.html')//子页面向父页面传递消息 } }, false); </script> </body> </html>
postMessage方法被调用时,会在所有页面脚本执行完毕之后像目标窗口派发一个 MessageEvent 消息,该MessageEvent消息有四个属性需要注意
type表示该message的类型
data为postMessage的第一个参数
origin表示调用postMessage方法窗口的源
source记录调用postMessage方法的窗口对象
特别注意
1.一定要等A页面嵌入的B页面加载完成之后,再进行postMessage跨域通信
2.一定要对origin做判断,去掉不是来自我们目标窗口的origin,防止来自其他origin的攻击
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持狼蚁SEO。
长沙网站设计
- 如何自己建一个网站 自己想建个网站,怎么建
- 如何制作网站免费建站 创建网站免费注册
- html简单网页代码 html简单网页代码超链接
- dreamweaver网页制作 dreamweaver网页制作模板
- 上海网站建设 上海网站建设制作微信
- 如何制作网站和网页 如何制作一个网页
- html网页制作代码大全 端午节html网页制作代码大
- app开发公司 app开发公司前十名
- html网页制作 html网页制作文字居中
- app制作一个需要多少钱 请人制作一个app多少钱
- 成都网站制作 成都网站制作维护
- 百度建一个网站多少钱 百度做个公司网站要多少
- html+css网页制作成品 web网页制作成品css+javascrip
- html网页制作案例 html网页设计案例
- html+css网页制作成品 web网页制作成品css+javascrip
- 个人网站模板 个人网站模板HTML