首页 > 解决方案 > 在 JavaScript 中使用 postMessage() 的复杂性

问题描述

当 iframe 及其父窗口位于不同的域时,我正在尝试通过 JavaScript 进行通信。我做了很多研究,结果证明如果正确使用 postMessage() 是一个好方法。我已经阅读了大量关于如何使用它来确保它以安全的方式实现并提出以下代码的资源。但是,由于我还是编码新手,所以我对 XSS 漏洞感到偏执,而且这段代码对我来说看起来太简单了,无法保证安全。我还没有在 Stack Overflow 上找到关于使用 postMessage() 的简单性/复杂性的明确帖子。

语境:

问题:

发件人(iframe):

<script type="text/javascript">
  parent.postMessage("download occurred", "http://my-main-web.com");
</script>

接收方(父窗口):

<script type="text/javascript">
  function receiveMessage(event) {
    if(event.origin !== “https://my-iframe-web.com”) return; // validate origin

    if (event.data !== "download occurred") return; // validate message content
      console.log(“msg received”);
      // trigger GA event
    };

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

谢谢!米海

标签: javascriptiframecross-domainxsspostmessage

解决方案


推荐阅读