window.postMessage用法

window.postMessage用法我们有时候需要在打开的两个页面之间之间通信 可能这种情况并不多 这时候 window postMessage 就显得特别有用 nbsp window postMessage nbsp 方法可以安全地实现跨源通信 通常 对于两个不同页面的脚本 只有当执行它们的页面位于具有相同的协议 通常为 https 端口号 443 为 https 的默认值 以及主机 nbsp 两个页面的模数 nbsp Document domain 设置为相

我们有时候需要在打开的两个页面之间之间通信(可能这种情况并不多),这时候window.postMessage就显得特别有用。

 

window.postMessage() 方法可以安全地实现跨源通信。通常,对于两个不同页面的脚本,只有当执行它们的页面位于具有相同的协议(通常为https),端口号(443为https的默认值),以及主机  (两个页面的模数 Document.domain设置为相同的值) 时,这两个脚本才能相互通信。window.postMessage() 方法提供了一种受控机制来规避此限制,只要正确的使用,这种方法就很安全。

想要更详细的介绍请看这里,但我看时感觉比较抽象,花了好多时间没理解。所以下面我做了个小例子给大家参考,希望能帮到大家。

现在我们有个需求是在页面a,里打开新窗口b,在b窗口里点击postMessage按钮,能够在a页面收到发来的消息。为了便于理解,这里我已将代码尽量简化,所以收到消息后只能在控制台看到打印

 

页面a的代码:

<!DOCTYPE html>
<html>

<head>
  <meta charset="UTF-8">
  <title>page a</title>
</head>
<script>
  function test() {

    let op = window.open('b.html', '_blank'); //打开新窗口,并建立窗口的引用变量op

    function receiveMessage(event) {
      console.log('event', event);

    }

    op.addEventListener("message", receiveMessage, false); //监听新开窗口发来的消息
  }
</script>

<body>
  <div>

    <button onClick="test()">open</button>

  </div>

</body>

</html>

 

页面b的代码:

 

<!DOCTYPE html>
<html>

<head>
  <meta charset="UTF-8">
  <title>page b</title>
</head>
<script>
  function post() {
    window.postMessage("hi there!", location.origin); //发送到所有同源的窗口,注意,当前窗口也会收到
  }

  function receiveMessage(event) {
    console.log('event', event)

  }
  window.addEventListener("message", receiveMessage, false);
</script>

<body>
  <div>

    <button onClick="post()">postMessage</button>

  </div>

</body>

</html>

如果您设置正常,在点击b页面的按钮后,a页面应该是下面这样:

 

window.postMessage用法

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

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

(0)
上一篇 2025年10月1日 上午8:01
下一篇 2025年10月1日 上午8:22


相关推荐

  • Mac搭建PHP环境[通俗易懂]

    Mac搭建PHP环境[通俗易懂]一、配置环境1启动APacheMac系统本身自带Apache,所以可以直接打开。以下为两种方式:打开“系统设置偏好(SystemPreferences)”->“共享(Sharing)”->“Web共享(WebSharing)”打开“终端(terminal)“,然后输入sudoapachectlstart,使Apache运行。开启Apache就是开启Web共享,这时输入“http://localhost”,就可以看到“Itworks!”的页面Apache默认根目

    2026年2月13日
    4
  • 艺术概论[通俗易懂]

    目录一.艺术的本质与特征艺术本质1.客观精神说2.主观精神说3.模仿说/再现说艺术的特征二.艺术的起源中外艺术史上关于艺术起源的五种观点艺术起源的第六种看法:多元决定论三.艺术的功能与艺术教育艺术的社会功能艺术教育四.文化系统中的艺术作为文化现象的艺术艺术与哲学艺术与宗教艺术与道德艺术与科学五.实用艺术实用艺术的主要种类实用艺术的审美特征中外实用艺术精品赏析六.造型艺术造型艺术的主要种类造型艺术的审美特征中外造型艺术精品赏析七.表情艺术表情艺术的主要种类表情艺术的审美特征中外表情艺术的精品赏析八.综合

    2022年4月17日
    53
  • jni断点调试「建议收藏」

    jni断点调试「建议收藏」jni断点调试

    2022年5月16日
    46
  • 微机原理与接口技术孙力娟_微机原理与接口技术第六版答案

    微机原理与接口技术孙力娟_微机原理与接口技术第六版答案第6版前言(ⅰ)第5版前言(ⅲ)章计算机的基础知识和发展概况(1)1.1计算机中数的表示方(1)1.1.1位计数制(1)1.1.2二制编码(3)1.1.3带符号数的表示方(4)1.第6版前言(ⅰ)第5版前言(ⅲ)章计算机的基础知识和发展概况(1)1.1计算机中数的表示方(1)1.1.1位计数制(1)1.1.2二制编码(3)1.1.3带符号数的表示方(4)1.2计算机的基本结构和软件(6)1.2.1…

    2022年10月2日
    5
  • 知道某负数补码后如何计算其绝对值?

    知道某负数补码后如何计算其绝对值?前些天写了如下日志 如何计算一个有符号数的补码表示 http blog csdn net jbb0523 article details nbsp 现在补充一点 按照 谭浩强 C 程序设计 第三版 北京 清华大学出版社 2005 的第 40 页至第 4

    2025年6月24日
    3
  • hibernate 在tomcat7.X 下配置mysql数据源「建议收藏」

    hibernate 在tomcat7.X 下配置mysql数据源

    2022年1月21日
    41

发表回复

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

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