zoukankan      html  css  js  c++  java
  • 【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>

     

  • 相关阅读:
    2017.11.2 JavaWeb----第六章 Servlet技术
    2017.11.1 微型计算机原理与接口技术-----第七章 中断系统与8237A DMA控制器
    2017.10.31 微型计算机组成原理与接口技术------- 第六章 存储器
    2017.10.30 软件工程------ 软件测试
    选择排序
    快速排序(基础版)
    [经验]java 高级面试解析
    [经验]java 高级面试
    链表翻转的图文讲解(递归与迭代两种实现)yet
    手把手教你如何自定义DAO框架(重量级干货)(yet)
  • 原文地址:https://www.cnblogs.com/carsonwuu/p/7583924.html
Copyright © 2011-2022 走看看