【h5】h5数据跨域交换postMessage用法

h5数据跨域交换postMessage用法

来源

1、与通过window.open()打开的新窗口跨域数据交换,代码如下:

(1)源窗口

 1 <!DOCTYPE html>
 2 <html>
 3 <head lang="en">
 4     <meta charset="UTF-8">
 5     <title>源窗口</title>
 6 </head>
 7 <body>
 8 <button id="btn">打开新窗口跨域交换数据</button>
 9 <p>我接收到来自新窗口的数据为:<span id="msg" style="color: red;"></span></p>
10 <script>
11     document.getElementById(‘btn‘).onclick =function() {
12         var newWindow =window.open(‘https://wenyang12.github.io/demo/postmsg/index.html‘);
13         //注册监听信息事件,看看是否有数据发送过来
14         window.addEventListener(‘message‘, function (e) {
15             if(e.data===‘true‘){//要是新窗口有数据返回过来,说明新窗口已经完全加载。然后才能够给新窗口发送数据
16                 newWindow.postMessage(‘hello world!‘, e.origin);//给新窗口发送数据
17                 console.log(e);//打印新窗口返回来的数据
18                 document.getElementById(‘msg‘).innerHTML = e.data;
19             }
20         });
21     };
22 </script>
23 </body>
24 </html>

(2)子窗口

 1 <!DOCTYPE html>
 2 <html>
 3 <head lang="en">
 4     <meta charset="UTF-8">
 5     <title>XDM(跨文档消息传递)</title>
 6 </head>
 7 <body>
 8 <h1>我是新窗口</h1>
 9 <p>我接收到来自源窗口的数据为:<span id="msg" style="color: red;"></span></p>
10 <script>
11     window.opener.postMessage(‘true‘, ‘http://www.qdfuns.com‘);//发送一个数据给源窗口,用于判断通过open打开的窗口是否装载完成。
12     /*监听看有没有数据发送过来*/
13     window.addEventListener(‘message‘,function(e) {
14         if(e.origin !== "http://www.qdfuns.com"){ // 判断数据发送方是否是可靠的地址
15             return
16         }
17         console.log(e);//打印接收到的数据对象
18         document.getElementById(‘msg‘).innerHTML = e.data;
19     })
20
21 </script>
22 </body>
23 </html>

2、与通过自身的iframe加载进来的页面进行跨域交换数据,代码如下:

(1)

 1 <!DOCTYPE html>
 2 <html>
 3 <head lang="en">
 4     <meta charset="UTF-8">
 5     <title>跨域交互数据-iframe</title>
 6 </head>
 7 <body>
 8 <h1>跨域交互数据-iframe</h1>
 9 <p>我接收到来自iframe的数据为:<span id="msg" style="color: red;"></span></p>
10 <iframe src="https://wenyang12.github.io/demo/postmsg/iframe.html"></iframe>
11 <script>
12
13 window.onload =function() {
14     /*向目标源发送数据*/
15     window.frames[0].postMessage(‘收到请回!‘,‘https://wenyang12.github.io‘);
16     /*监听有没有返回过来的数据*/
17     window.addEventListener(‘message‘,function(e) {
18         console.log(e);
19         document.getElementById(‘msg‘).innerHTML = e.data;
20     })
21 };
22
23 </script>
24 </body>
25 </html>

(2)

 1 <!DOCTYPE html>
 2 <html>
 3 <head lang="en">
 4     <meta charset="UTF-8">
 5     <title>iframe</title>
 6 </head>
 7 <body>
 8 <p>我是iframe</p>
 9 <p>我接收到到的数据为:<span id="msg" style="color: red;"></span></p>
10 <script>
11     /*监听看有没有数据发送过来*/
12     window.addEventListener(‘message‘,function(e) {
13         if(e.origin !== "http://www.qdfuns.com"){ // 判断数据发送方是否是可靠的地址
14             return
15         }
16         console.log(e);//打印接收到的数据对象
17         document.getElementById(‘msg‘).innerHTML = e.data;
18         /*回发数据*/
19         e.source.postMessage(‘hello world‘, e.origin);
20     })
21
22
23 </script>
24 </body>
25 </html>
时间: 2024-10-04 15:34:26

【h5】h5数据跨域交换postMessage用法的相关文章

HTML5 postMessage 跨域交换数据

前言 之前简单讲解了利用script标签(jsonp)以及iframe标签(window.name.location.hash)来跨域交换数据,今天我们来学习一下HTML5的api,利用postMessage来跨域交换数据.和前面一些方式交换数据方式不同的是,利用postMessage不能和服务端交换数据,只能在两个窗口(iframe)之间交换数据,废话不多说,我们直接进入实战. 实战postMessage overview 上文中说,postMessage是用于两个窗口(iframe)之间交换

解决js获取数据跨域问题,jsonP

网上说了一些jsonp的示例,感觉都没用,最后研究了一下,调用腾讯的一个api.最后要加output=jsonp&callback=?这个,比较适用. var url = "http://apis.map.qq.com/ws/place/v1/search?boundary=nearby(39.908491,116.374328,1000)&keyword=%E6%88%90%E9%83%BD&key=OB4BZ-D4W3U-B7VVO-4PJWW-6TKDJ-WPB77

跨域传输信息postMessage

widnow.postMessage()方法允许安全的跨域传输. Syntax otherWindow.postMessage(message, targetOrigin, [transfer]); otherWindow 指向另一个窗口的引用:. message 传输给另一个窗口的信息 targetOrigin 一个字符串,指定消息来源(URL形式).记住总是提供一个特定的URL地址如果你知道的话,不要总是使用“*”(针对所有的URL),因为指定一个特定的URL可以防止恶意的网站来攻击. Th

jsonp实现数据跨域请求

1.我们知道,哪怕跨域js文件中的代码(当然指符合web脚本安全策略的),web页面也是可以无条件执行的. 远程服务器remoteserver.com根目录下有个remote.js文件代码如下: alert('我是远程文件'); 本地服务器localserver.com下有个jsonp.html页面代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org

关于前端调用后端php数据跨域的问题

https://blog.csdn.net/qq_21386275/article/details/87269979 js前端 <!DOCTYPE html><html><head> <meta charset="utf-8" /> <script type="text/javascript" src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js&q

H5页面请求跨域问题

1.  <meta http-equiv="Access-Control-Allow-Origin" content="*"> 说明一下什么情况下我们用到这个标签:如果chrome浏览器报 XMLHttpRequest cannot load http://google.com/. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'h

用 json 实现跨域,实现数据的交换

前不久突然想到了,如果我的数据在后台,那么如何把数据,放到前台,进行处理,前后台不在一个域中,那么怎么数据跨域了,我想到了用json 操作.后台的代码如下: ht.php $ar=array('a'=>'你好','b'=>'他们','d'=>'中国'); $json_str=json_encode($ar); echo "getProfile($json_str)"; 关于json 我还想说一句,在php 中一般把数据转换成json 数据,用函数json_encode

AJAX及其跨域的主要解决方法

AJAX = Asynchronous JavaScript andXML(异步的 JavaScript 和 XML).通过在后台与服务器进行少量数据交换,使网页实现异步更新.要明白异步交互可以通过同步和异步的对比很容易明白: 同步交互,就是最常见的click-refresh模式,点一个连接或提交一个表单,然后就必须重载整个页面 异步交互,javascript根据返回的数据,不刷新页面而改变当前页面的显示,例如:新浪微博,百度地图. Ajax的异步交互从XMLHttpRequest这个对象开始,

Jquery的跨域调用

JQuery1.2后getJSON方法支持跨域读取json数据,原理是利用一个叫做jsonp的概念.当然,究其本质还是通过script标签动态加载js,似乎这是实现真正跨域的唯一方法. getJSON的用法JQuery手册已经写得很详细,参考手册就可以了,很简单.需要指出的一点是getJSON利用的jsonp需要客户端与服务端作出配合. 客户端传递的URL里要包含callback变量,以形如callback=?的形式结尾.(jquery会随机生成一个字符串替换?传递给服务端) 服务端获取客户端传