美文网首页
怎么使用postMessage进行通信

怎么使用postMessage进行通信

作者: yun_blog | 来源:发表于2021-04-28 17:21 被阅读0次

postMessage是window的方法,可以通过这个方法实现两个窗口之间的通信,总结下俩大概有两种类型

1.两个页面之间发送信息

/* page two */
....
<body>
  <h1>page two</h1>
  <h1>
    <a href="javascript:;" onclick="window.open('./page-one.html')">
      open page one
    </a>
   </h1>
    <script type="text/javascript">
    window.addEventListener('message', function(event) {
        console.log('event: ', event);
    }, false);
    </script>
</body>
...
/* end */

/* page one */
...
<body>
  <h1>page one</h1>
  <script type="text/javascript">
    const targetWin = window.opener; // 获取创建当前窗口的window对象的引用
    window.onload = function() {
        // 注意是绑定在要向某个窗口发送信息的那个窗口引用,而不是单纯的window;
        // window 是当前窗口的引用
    targetWin.postMessage('hahale','http://127.0.0.1:8848');
  }   
  </script>
</body>
...
/* end */

以上代码的意思是在page2中打开page1,并且在page1中通过postMessage向page2发送信息,page2页面通过绑定message事件获取page1发送过来的信息。

2.页面向页面中的iframe发送信息

/* main page */
...
<h1>page main</h1>
<iframe id="iframe" src="./page-sub.html" width="300" height="300"></iframe>
<script type="text/javascript">
    window.onload = function() {
      // 获取iframe的窗口引用
      var iframeWin = document.getElementById('iframe').contentWindow;
      // console.log('iframeWin: ', iframeWin)
      iframeWin.postMessage('this is message from main', 'http://127.0.0.1:8848');
    }
</script>
...
/* end */

/* sub page */
...
<h1 id="title">page sub</h1>
<script type="text/javascript">
window.addEventListener('message', function(e) {
    document.getElementById('title').innerText = e.data;
}, false);
</script>
...
/* end */

上面代码的意思是给iframe发送信息,iframe接受信息,并在子页面中展示出来发送的信息

通过上边两个简单的例子可知,进行这种通信只需要简单的两个方法

第一步:分发消息,及把消息发送给相应的窗口
otherWindow.postMessage(message, targetOrigin, transfer);
otherWindow:你要发送消息给哪个窗口就是哪个窗口的引用,注意不是当前窗口,可以是iframe的窗口对象,或者是window.open返回的窗口对象。如果获取不到otherWindow是没法对相应的窗口发送信息的。
message:将要发送给otherWindow的数据。
targetOrigin:指定哪些窗口可以获取到发送的数据(可以使用“*”表示无限制)。
transfer:是一串和message 同时传递的Transferable对象,可选。

第二步:监听message事件,获取另一个窗口发送给当前窗口的信息
window.addEventListener('message', function, useCapture);
message:事件类型。
function: 'message'事件发生时调用的函数。
useCapture:布尔值,使用事件冒泡还是事件捕获,可选。

通过上面接单的两步就可以实现一个简单的通信

相关文章

网友评论

      本文标题:怎么使用postMessage进行通信

      本文链接:https://www.haomeiwen.com/subject/okbvrltx.html