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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • HandlerThread使用

    HandlerThread使用优点 1 制作一个后台异步线程 需要的时候可以丢一个任务给它 使用灵活 2 可以避免项目中随处可见的 newThread start 增加系统开销 3 可以代替 Thread looper handlerd 的写法缺点 1 不要执行太耗时的任务 此种情况就用线程池吧 http blog csdn net android xue article details 6289

    2025年6月16日
    2
  • 笛卡尔积 php,PHP笛卡尔积实现算法示例

    笛卡尔积 php,PHP笛卡尔积实现算法示例本文实例讲述了PHP笛卡尔积实现算法。分享给大家供大家参考,具体如下:$arr=array(array(1,3,4,5),array(3,5,7,9),array(76,6,1,0));/****实现二维数组的笛卡尔积组合**$arr要进行笛卡尔积的二维数组**$str最终实现的笛卡尔积组合,可不写**@returnarray**/functioncartesian($arr,…

    2022年7月11日
    17
  • Pycharm中三种注释[通俗易懂]

    Pycharm中三种注释[通俗易懂]”””注释””””’注释”’\#注释前两种不是真正的注释,知识字符串的另一种表现形式,例如会被用于写__doc__等长字符串的时候起到保留格式的目的,虽然能够完成注释功能,但实际上还是字符串。按ctrl+/即可快速注释代码块ps.转载出处作者已注销账号…

    2022年8月28日
    5
  • AD中测量两点之间的距离

    AD中测量两点之间的距离

    2021年6月21日
    94
  • Nutch使用方法简介

    Nutch使用方法简介Nutch使用方法简介 目前Nutch采用Sehll的启动方式,如果您使用的是Windows系统,那么首先需要安装Cygwin。本文就以在Windows中为例,介绍Nutch的安装和使用方法。 (1)准备需要的软件列表   Cygwin    (下载地址:http://www.cygwin.com/setup.exe)   Jdk(1.4.2以上版本,

    2025年7月14日
    3
  • java保留小数_Java保留两位小数的几种做法「建议收藏」

    java保留小数_Java保留两位小数的几种做法「建议收藏」页面或界面上展示的数据保留小数点后两位。为了达到这样的展示效果,本文列举了几个方法:1.使用java.math.BigDecimal2.使用java.text.DecimalFormat3.使用java.text.NumberFormat4.使用java.util.Formatter5.使用String.format……另外可以自己实现或者借用封装好的类库来实现,在这篇文章中…

    2022年9月24日
    2

发表回复

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

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