| 
 H5
 提供了网页文档之间互相接收与发送消息的功能。当在
 a
 页面中通过
 window.open
 方法打开
 b
 页面,或者在
 a
 页面中通过
 iframe
 嵌套
 b
 页面,我们想让
 a
 中的数据传递到
 b
 中就可以
 使用跨文档消息传输 
  
 
  A
  页面的核心代码 
  
  window.onmessage = function(event){ 
  
  event.data // 
  数据 
  
  event.origin //
  源 
  
  }
  
  B
  页面的核心代码 
  
  otherWindow.postMessage(message,targetOrigin) 
  
  // otherWindow
  为要发送窗口对象的引用
  ,
  可以通过
  window.open
  返回该对象
  ,
  或者通过获取
  iframe
  节点获取该对象 
  
  // message
  为消息文本 
  
  // targetOrigin
  为接受消息的对象窗口的
  URL
  地址
  message-post.html?
    
 message-receive.html
 <!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>A页面</title>
</head>
<body>
  <p>我是A页面</p>
  <button id="btn_open">打开B页面</button>
  <button id="btn_send">发送数据</button>
  <button id="btn_iframe">iframe</button>
  <iframe id="otherWin" src="./2-B.html" width="200px" height="100px" frameborder="0"></iframe>
  <script>
    // 1.获取按钮dom节点
    const btnOpen = document.querySelector('#btn_open');
    const btnSend = document.querySelector('#btn_send');
    const btnIframe = document.querySelector('#btn_iframe');
    let win;
    // 2.绑定事件
    btnOpen.onclick = function () {
      // 通过新窗口打开B页面
      win = window.open('./2-B.html');
    }
    // 将win重新赋值
    btnIframe.onclick = function () {
      win = document.querySelector('#otherWin').contentWindow
    }
    btnSend.onclick = function () {
      // 调用方法传递数据
      win.postMessage('hello B.html')
    }
    // btnOpen.addEventListener('click',function() {
    // }, false)
  </script>
</body>
</html>
  
 <!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>B页面</title>
  <style>
    body {
      height: 800px;
      background-color: cadetblue;
    }
  </style>
</head>
<body>
  <p>我是B页面</p>
  <script>
    window.onmessage = function (e) {
      console.log(e.data);
      console.log(e.origin);
    }
  </script>
</body>
</html>
 websocket 
  使用
  websocket
  可以在服务器与客户端之间建立一个非
  HTTP
  的双向连接,这个连接是实时的也是永久的,除非被显示关闭。服务器可以随时将消息推送到客户端。
   
 Websocket客户端 
  要想实现websocket连接
  ,
  需要有服务器的支持
  。 
   
  
   //1. 
   建立与服务器之间的长连接 
   
   var ws = new WebSocket(“ws://127.0.0.1:7788/imserver/1001"); 
   
   //2. 
   连接成功后的回调函数 
   
   ws.onopen = function(evt) { 
   
   console.log("Connection open ..."); 
   
   ws.send("Hello WebSockets!"); 
   
   }; 
   
   //3.
   收到服务器消息的回调函数 
   
   ws.onmessage = function(evt) { console.log( "Received Message: " + evt.data); }; 
   
   //4.
   指定连接关闭后的回调函数 
   
   ws.onclose = function(evt) { console.log("Connection closed."); };
    
  <!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>webSocket</title>
  <script>
    // 1.创建链接
    const ws = new WebSocket('ws://47.94.46.113:7788/imserver/1')
    // 2.监听链接事件
    ws.addEventListener('open', openHandler);
    ws.addEventListener('close', closeHandler);
    ws.addEventListener('error', errorHandler);
    ws.addEventListener('message', messageHandler);
    function openHandler() {
      console.log('WebSocket open');
      // 向服务器端发送数据
      ws.send('hello Server');
    }
    function closeHandler() {
      console.log('WebSocket close');
    }
    function errorHandler() {
      console.log('WebSocket erroe');
    }
    function messageHandler(e) {
      // console.log('WebSocket message');
      console.log(e.data);
      console.log(e.origin);
    }
  </script>
</head>
<body>
</body>
</html>
 |