【JS】postMessage 用法(可以给iframe传值)

news2024/11/18 23:23:22

文章目录

    • 基本概念
    • 代码案例

基本概念

跨文档消息,有时候也简称为XDM(cross-document messaging)

  • 是一种在不同执行上下文(如不同源的页面)间传递信息的能力。
  • 例如:www.wrox.com上的页面想要与包含在内嵌窗格中的p2p.wrox.com上面的页面通信
  • XMD的核心就是postMessage()方法
  • postMessage()方法:将message传递给指定窗口
  • postMessage(data,origin)方法接受两个参数:
let iframeWindow = document.getElementById('myframe').contentWindow;
iframeWindow.postMessage('aaa', 'http://www.wrox.com');
1. data: 
- 要传输的数据,推荐使用字符串格式,其他格式的浏览器的兼容性不好
- 如果要传输结构化数据,可以通过JSON.stringify处理,接收时用JSON.parse转换回来
2. origin: 
- 指明目标窗口的源,协议+主机+端口号[+URL]URL会被忽略,所以可以不写
- 如果不想限制接收目标源:可以传 '*'
- 如果目标与当前窗口同源:可以传 '/'
  • 接收消息
window.addEventListener('message',(event)=>{
	// 判断源路径是否来自预期发生者
	if(event.origin.includes('http://www.wrox.com')){
		// 获取传过来的数据
		console.log(event.data)
		// 再传回去一条消息
		event.source.postMessage('已收到消息', 'p2p.wrox.com')
	}
})
// event包含3个参数
- event.data: 接收到的数据
- event.origin: 发送消息的文档源
- event.source: 发生消息的文档中window对象的代理

代码案例

  • 目录结构:

在这里插入图片描述

  • 父页面(main.html):
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
        <h1>主页面</h1>
        <iframe id="child" src="./child.html"></iframe>
        <div>
            <h2>主页面跨域接收消息区域</h2>
            <div id="message"></div>
        </div>
    </body>
    <script>
        /* -------------iframe跨域数据传递--------------- */
        
        //传递数据到子页面
        window.onload = function() {
            document.getElementById('child').contentWindow.postMessage("主页面消息", "/")
        }
        //接受子页面传递过来的数据
        window.addEventListener('message', function(event) {
            document.getElementById('message').innerHTML = "收到" + event.origin + "消息:" + event.data;
        }, false);
    </script>
</html>
  • 子页面(child.html):
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
        <h1>子页面: </h1>
        <div>
            <div id="message"></div>
        </div>
    </body>
    <script>
		//接收父页面传过来的数据
		window.addEventListener('message', function(event) {
			// 因此判断接收的消息源是否是父页面
			if (event.origin.includes("http://127.0.0.1:8848")) {
				console.log(event);
				document.getElementById('message').innerHTML = "收到" + event.origin + "消息:" + event.data;
	
				//把数据传递给父页面 > top.postMessage(要传递的数据,父页面的url访问地址)
				window.top.postMessage("子页面消息收到", 'http://127.0.0.1:8848');
			}
		}, false);
	</script>
</html>
  • 运行结果:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/72491.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第一个Spring Boot程序

⭐️前言⭐️ 本文主要介绍Spring Boot项目的创建流程&#xff0c;及Spring Boot项目目录的一些注意事项。 &#x1f349;博客主页&#xff1a; &#x1f341;【如风暖阳】&#x1f341; &#x1f349;精品Java专栏【JavaEE进阶】、【JavaEE初阶】、【MySQL】、【数据结构】 &…

JAVA SCRIPT设计模式--行为型--设计模式之Command命令模式(14)

JAVA SCRIPT设计模式是本人根据GOF的设计模式写的博客记录。使用JAVA SCRIPT语言来实现主体功能&#xff0c;所以不可能像C&#xff0c;JAVA等面向对象语言一样严谨&#xff0c;大部分程序都附上了JAVA SCRIPT代码&#xff0c;代码只是实现了设计模式的主体功能&#xff0c;不代…

服务器硬件规格常用查看命令——CPU相关命令

使用lscpu 命令可以从sysfs和/proc/cpuinfo中收集CPU体系结构信息&#xff0c;并解析优化为易阅读的格式。该信息包括&#xff1a;CPU的线程、核心、套接字数量和非一致内存访问&#xff08;NUMA&#xff09;节点的数量&#xff0c;以及CPU缓存、共享缓存、系列、型号等信息。 …

英文写作—Grammarly安装及下载

Grammarly是一款在线语法纠正和校对工具&#xff0c;支持Windows、Mac、iOS和Android等多个平台。 主要功能包括检查单词拼写、纠正标点符号、修正语法错误、调整语气以及给出风格建议等&#xff1b;对学术写作来说&#xff0c;Grammarly还可以帮助查重。 登陆界面&#xff1a…

每日一题:折半查找法,二分查找法

每日一题&#xff1a;折半查找法&#xff0c;二分查找法每日一题&#xff1a;折半查找法&#xff0c;二分查找法二分查找法定义&#xff1a;代码1&#xff1a;代码2&#xff1a;每日一题&#xff1a;折半查找法&#xff0c;二分查找法 ​ &#x1f496;&#x1f496;个人博客:比…

SpringBoot之自定义注解

目录 1.java注解简介 1.1.java注解分类 1.1.1.JDK基本注解 1.1.2.JDK元注解 1.1.3.自定义注解 1.1.4 在这里如何自定义注解&#xff1f; 2、自定义注解 3.Aop应用自定义注解 1.java注解简介 Java注解是附加在代码中的一些元信息&#xff0c;用于一些工具在编译、运行时进行解…

可靠性udp传输大文件

高级计算机网络大作业-可靠性udp传输大文件实验数据zstd压缩1G文件&#xff08;延迟100ms、丢包1%&#xff09;0.1G文件&#xff08;延迟100ms、丢包1%&#xff09;0.01G文件&#xff08;延迟100ms、丢包1%&#xff09;多线程lzma压缩1G文件&#xff08;延迟100ms、丢包1%&…

N子棋(外加双人对战)详解!推荐!!!

文章目录准备工作创建菜单进入游戏初始化棋盘、打印棋盘玩家下棋、电脑下棋、生成随机数判断输赢大家好&#xff01;时隔多天&#xff0c;我终于写博客了&#xff0c;真的是开心&#xff01;这一次带来的是N子棋有双人对战和单人下棋&#xff0c;请认真看下去&#xff0c;我会竭…

虚拟人纷纷「出道」,社交泛娱乐场景如何迎接新顶流?

⬆️“政企数智办公行业研究报告及融云新品发布会”明天直播&#xff01; 本月 12 日&#xff0c;花房集团即将于香港上市。关注【融云全球互联网通信云】回复【融云】抽取高颜值大容量高端可乐保温杯哦~ 中国政企数智办公平台 在带货直播平台的赫赫之名下&#xff0c;娱乐直播…

Git —— 那些在工作中日常使用的操作

Git —— 那些在工作中日常使用的操作 《工欲善其事&#xff0c;必先利其器》—— 既然点进来了&#xff0c;麻烦你看下去&#xff0c;希望你有不一样的收获~ 一、同一项目关联不同平台的远程仓库 格式&#xff1a;git remote add 命名 仓库链接 git remote add github ssh:/…

六、排序算法介绍2

1、冒泡排序 1.1 基本介绍 冒泡排序&#xff08;Bubble Sorting&#xff09; 的基本思想是&#xff1a; 通过对待排序序列从前向后&#xff08;从下标较小的元素开始&#xff09;&#xff0c;依次比较相邻元素的值&#xff0c; 若发现逆序则交换&#xff0c; 使值较大的元素逐…

netcore接入钉钉扫码登录

netcore接入钉钉扫码登录一、首先官方文档预览二、登录钉钉开发者后台三、创建第三方登录授权应用1.新版打开方式2.旧版打开方式&#xff08;1&#xff09;先返回旧版页面&#xff08;2&#xff09;选择应用开发&#xff08;3&#xff09;编辑登录应用信息&#xff08;4&#x…

npm包是什么?如何发布npm包?

Node的组成 内置模块 自定义模块 第三方模块&#xff08;什么是包&#xff1f;&#xff09; npm包包括那些东西&#xff1f; package.json README.md 。。。.js 注册npm账号 细节 发布包 package.json README.md index.js date htmlEscape 层级结构 发布指令 N…

STC15 - C51 - Memory Models

文章目录STC15 - C51 - Memory Models概述笔记内存用量的优化思路ENDSTC15 - C51 - Memory Models 概述 在STC上测试呢, 想看看变量(不同类型的定义)被编译器分配在哪个内存范围(idata, pdata, xdata)? 同时, 总结一下降低内存用量的思路(如果像上位机那样内存管够, 就不用考…

Linux系统编程第五节——进程创建、终止、等待(通俗易懂快速上手版本)

目录 进程的创建 写时拷贝 进程的终止 进程的等待 状态参数status wait函数和waitpid函数 我们本节内容&#xff0c;主要来讲述进程控制有关的内容。 同样&#xff0c;我们会用通俗易懂、不同于教科书的讲授思路&#xff0c;来为大家讲解。 同时&#xff0c;本节内容板块…

你了解你的身体吗?- 基因社会

关于作者 本书的两位作者分别是以太•亚奈和马丁 • 菜凯尔&#xff0c;前者是哈佛大学髙级研究学者&#xff0c; 任职于纽约大学&#xff0c;是生物化学和分子药理 学的教授&#xff1b;后者是杜塞尔多夫海因西里•海 涅大学的生物信息学教授。两位作者从基 因之间合作和竞争…

[附源码]计算机毕业设计的4s店车辆管理系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

5款十分好用,但是没有什么知名度的软件

随着网络信息技术的发展&#xff0c;越来越多的人在办公时需要用到电脑了。如果你想提高办公效率&#xff0c;那么就少不了工具的帮忙&#xff0c;今天给大家分享5款办公必备的好软件。 1.数据可视化软件——Power BI Power BI是一款出色的业务分析软件。Power BI主要是用于在…

[Go] go基础4

1. 并发编程 1.1 并发和并行 并发: 多个线程在同个核心的CPU上运行.并发的本质是串行. 并行: 多个线程在多个核心的CPU上运行. 1.2 协程和线程 协程: 独立的栈空间,共享堆空间,调度由用户控制,本质上有点类似用户及线程,这些用户及线程的调度也是自己实现的. 线程: 一个线…

[附源码]JAVA毕业设计网络饮品销售管理系统(系统+LW)

[附源码]JAVA毕业设计网络饮品销售管理系统&#xff08;系统LW&#xff09; 项目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目…