postMessage详解

postMessage详解目录一、概述二、详解一、概述作用该方法是HTML5引入的API,可以通过异步方式实现跨源通信,多用于窗口间数据通信。它提供了一种受控机制来规避不同源脚本无法通信的限制,只要正确使用,这种方法很安全。什么是跨源同源即指相同的协议、域名或IP、端口号。浏览器具有同源限制,同源脚本可以相互通信,一般非同源(跨源)的脚本文件禁止相互通信。二、详解语法示例-发送程序&…

大家好,又见面了,我是你们的朋友全栈君。

目录

一、概述

二、详解


一、概述

作用

        该方法是HTML5引入的API,可以通过异步方式实现跨源通信,多用于窗口间数据通信。它提供了一种受控机制来规避不同源脚本无法通信的限制,只要正确使用,这种方法很安全。   

什么是跨源

        同源即指相同的协议、域名或IP、端口号。浏览器具有同源限制,同源脚本可以相互通信,一般非同源(跨源)的脚本文件禁止相互通信。

语法

postMessage详解

message事件

        通过绑定window的message事件来监听发送的跨文档消息传输内容。

二、代码示例

示例1

        发送程序如下代码所示。 

<div>
    <input id="text" type="text" value="demo" />
    <button id="btn">发送消息</button>
</div>
<iframe 
    loading="lazy" 
    id="iframe" src="https://c.runoob.com/runoobtest/postMessage_receiver.html" 
    width="300" height="360">
    <p>你的浏览器不支持 iframe。</p>
</iframe>

<script>
    window.onload = function() {
        var receiver = document.getElementById('iframe').contentWindow;
        var btn = document.getElementById('btn');
        btn.addEventListener('click', function (e) {
            e.preventDefault();
            var val = document.getElementById('text').value;
            receiver.postMessage("Hello", "https://c.runoob.com");
        });
    }
</script>

        接收程序如下代码所示。 

<script>
// 监听 message 事件
window.addEventListener('message', function (e) {  
    if (e.origin !== "https://www.runoob.com") {  // 验证消息来源地址
        return;
    }
    console.log("从"+ e.origin +"收到消息: " + e.data);
});
</script>
  • e.source:消息源,消息的发送窗口/iframe
  • e.origin:消息源的URL(可能包含协议、域名或IP、端口),用来验证数据
  • e.data:发送过来的数据

示例2:iframe父子页面通信

        接收消息的一方需要监听message事件。

window.addEventListener(“message”, ()=> { 

});

        父页面向子页面传递信息。

let ifr = document.getElementById("iframe")
ifr.contentWindow.postMessage('父页面向子页面发送消息', "*")

// or

ifr.contentWindow.postMessage('父页面向子页面发送消息', "http://10.192.195.166:56225/son.html")

        子页面向父页面传递数据。

window.parent.postMessage('子页面向父页面发送消息','*')
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/159842.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 深度学习中Dropout原理解析「建议收藏」

    深度学习中Dropout原理解析「建议收藏」1.Dropout简介1.1Dropout出现的原因在机器学习的模型中,如果模型的参数太多,而训练样本又太少,训练出来的模型很容易产生过拟合的现象。在训练神经网络的时候经常会遇到过拟合的问题,过拟合具体表现在:模型在训练数据上损失函数较小,预测准确率较高;但是在测试数据上损失函数比较大,预测准确率较低。过拟合是很多机器学习的通病。如果模型过拟合,那么得到的模型几乎不能用。为了解决过拟合问题,一…

  • VBA数组的排序_vba函数返回值 数组

    VBA数组的排序_vba函数返回值 数组我们平时用的表格排序,只相对来说是在在表格中的升序降序。今天就好奇如果系统中实现排序他是怎么实现的呢。经过一番折腾查找,真是一看吓一跳,真是感觉蚂蚁看大象,发现排序分为:今天仅整理了最简单的两种排序。。。先来看下定义和实现的方法吧。选择排序(Selectionsort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据

  • cubieboard上手

    cubieboard上手最近刚买了cubieboard,入手到玩转后的各个过程记录下购买链接:[url]http://item.taobao.com/item.htm?id=18271795262[/url]已有装备:笔记本,无线路由器入手装备:cubieboard,带电源,ttl2usb线等关键问题:无显示器与电视超市购物:读卡器+网线,(从手机上拿的TF卡)[siz…

  • CF889E Mod Mod Mod

    CF889E Mod Mod Mod

  • Linux系统结构详解

    Linux系统结构详解Linux系统一般有4个主要部分:内核、shell、文件系统和应用程序。内核、shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序、管理文件并使用系统。部分层次结构如图1-1所示。1.linux内核Linux内核是世界上最大的开源项目之一,内核是与计算机硬件接口的易替换软件的最低级别。它负责将所有以“用户模式”运行的应用程…

  • SQL Server 2000安装教程图解

    SQLServer2000安装教程图解、、、下面网盘链接中的SQL2000数据库在Win7和Win10系统上安装都是可以正常使用的,只不过是Win10上安装的话,需要先替换一下原来C盘中的一个文件而已怎么替换请参考这个:http://www.cnblogs.com/iLoveBurning/p/8639711.html此版本针对XP和Win7系统的,Win…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号