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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • PHP 正则表达式匹配函数 preg_match 与 preg_match_all

    PHP 正则表达式匹配函数 preg_match 与 preg_match_all

    2021年10月12日
    85
  • php小程序接口开发_微信小程序登录流程

    php小程序接口开发_微信小程序登录流程微信小程序调用PHP后台接口,解析纯html文本,效果图片预览1、微信js动态传参:wx.request({url:’https://m.****.com/index.php/Home/Xiaoxxf/activity_detail?a_id=’+options.id,//含富文本htmldata:{is_detail:1},method:’GET’,//OPTIONS,GET,HE…

    2022年9月4日
    3
  • Python之字典添加元素

    Python之字典添加元素手动推荐知识点字典创建->创建字典(7种方式)删除元素->字典删除元素(6种方式)修改元素->字典修改元素(4种方式)遍历元素->字典遍历元素(4种方式)查找元素->字典查找元素(3种方式)本文使用代码book_dict={“price”:500,”bookName”:”Python设计”,”weight”:”250g”}第一种方式:使用[]book_dict[“owner”]=”tyson”说明:中.

    2022年6月17日
    42
  • “Word在试图打开文件时遇到错误”的解决方法[通俗易懂]

    “Word在试图打开文件时遇到错误”的解决方法[通俗易懂] 大家都应该知道“.DOCX”格式只有Word2007或以上版本才可以打开,Word2003是无法打开的!正好我电脑上03和07都有,所以就答应了。接收文件打开后既然提示“Word在试图打开文件时遇到错误。请尝试下列方法”(如下图)。  还好,本人使用Office办公软件已经很多年了,各方面问题都遇见过,这点小难题难不到我的,三下两下就被我搞定了。相信遇到“W…

    2022年5月1日
    83
  • WebStorm 格式化代码快捷键

    WebStorm 格式化代码快捷键原文链接:https://kaifazhinan.com/webstorm-formatting-code-shortcuts/现在平时都是使用VSCode作为日常开发工具,偶尔会打开WebStorm临时使用一下,但是却经常忘记格式化代码的快捷键,放在这里防止遗忘。WindowsWindows系统下WebStorm格式化代码的快键键为:Ctrl+Alt+l…

    2022年4月27日
    83
  • linux 心脏滴血漏洞,心脏出血漏洞(heartbleeder 自动检测 OpenSSL 心脏出血漏洞 (附修复指南))…

    linux 心脏滴血漏洞,心脏出血漏洞(heartbleeder 自动检测 OpenSSL 心脏出血漏洞 (附修复指南))…心脏出血漏洞(heartbleeder自动检测OpenSSL心脏出血漏洞(附修复指南)),哪吒游戏网给大家带来详细的心脏出血漏洞(heartbleeder自动检测OpenSSL心脏出血漏洞(附修复指南))介绍,大家可以阅读一下,希望这篇心脏出血漏洞(heartbleeder自动检测OpenSSL心脏出血漏洞(附修复指南))可以给你带来参考价值。heartbleeder可以…

    2022年7月17日
    19

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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