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


相关推荐

  • python之pandas简单介绍及使用(一)「建议收藏」

    python之pandas简单介绍及使用(一)「建议收藏」一、  Pandas简介1、PythonDataAnalysisLibrary或pandas是基于NumPy的一种工具,该工具是为了解决数据分析任务而创建的。Pandas纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一…

    2026年4月15日
    4
  • 原生JS投票特效

    效果:http://hovertree.com/texiao/js/24/效果图:代码如下:转自:http://hovertree.com/h/bjaf/jsdiaocha.htm特效:htt

    2021年12月23日
    53
  • 基于相关滤波的目标跟踪算法_粒子滤波目标跟踪算法优缺点

    基于相关滤波的目标跟踪算法_粒子滤波目标跟踪算法优缺点相关跟踪的核心就是滤波器filters的求解,从MOSSE到KCF再到SRDCF,滤波器的模型越来越复杂,计算速度越来越慢,使得相关滤波在计算速度上的优势越来越不明显。比如较新的算法CFLB和BACF等采用了空间约束来解决边界效应,SRDCF和STRCF等使用空间正则来解决边界效应,这些解决边界效应的措施都让相关跟踪面临实时性的挑战。ADMM把一个大优化问题分成可分布式同时求解的多个子问题,通过对…

    2025年6月25日
    4
  • vue项目怎么关闭eslint_vue plugin

    vue项目怎么关闭eslint_vue plugineslint的检测功能太严格了,导致写了一点代码就会报一堆无关紧要的异常,大多都是格式不规范的问题,但是这样太影响效率和心情了。网上找了半天好多都是很老的解决办法,也不适合现在的vue-cli,最后终于找到一个可行的解决办法,也很简单。不小心在创建项目时打开了eslint检测功能也没关系,只需要在vue.config.js里加入:module.exports={lintOnSave:false}…

    2022年10月8日
    6
  • 分布式事务atomikos的原理_spring分布式事务

    分布式事务atomikos的原理_spring分布式事务atomikos+jta+JdbcTemplate依赖包(部分)事务等配置jta.properties(修改默认配置使用)测试,JdbcTemplate操作数据库@Transactional

    2022年8月5日
    4
  • Stata: 空间面板数据模型及Stata实现

    Stata: 空间面板数据模型及Stata实现作者 游万海 福州大学 Stata 连享会 知乎 简书 码云 CSDN 来源 Golgher 和 Voss 2016 1 背景介绍由于面板数据模型所具有的众多优点 刻画个体异质性 减弱模型共线性和增加自由度等 其被广泛应用于实证计量中 在 Stata 面板数据模型 一文读懂 文中 我们已对面板数据模型进行了介绍 然而 当研究样本涉及到多个

    2026年3月20日
    2

发表回复

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

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