在 addEventListener 中查找源 iframe 的周围元素

Find surrounding element of source iframe in addEventListener

我有一个 shell 页面,其中包含许多沙盒 iframe。

例如

<div>
  <div id="sb1"><iframe sandbox="allow-scripts" srcdoc="stuff here"/></div>
  <div id="sb2"><iframe sandbox="allow-scripts" srcdoc="other stuff here"/></div>
</div>

当我收到来自其中一个 iframe 的消息时,我想知道父 div(即 #sb1 或 #sb2)。

我尝试了以下方法,但没有用:

function receiveMessage(event)
{
  // Follow line results in : Uncaught DOMException: Blocked a frame with origin ...
  var parentDiv = $(event.source).parent();
}

window.addEventListener("message", receiveMessage);

有没有一种方法可以确定 iframe 的父级而无需在来自 iframe 的消息中传递 id?

最近我需要知道切换模式的按钮的 ID。 'relatedTarget' 对我有用,它可能也适用于你的情况。

    function receiveMessage(event)
    {
     var id = event.relatedTarget.id;
    }
    
    window.addEventListener("message", receiveMessage);

我能够根据 "Alexander O'Mara" 评论使它工作。

function receiveMessage(event)
{
  var parentDiv = $($('iframe').toArray().find(
      function(f) {
        return f.contentWindow === event.source;
      }
    )).parent();
}

window.addEventListener("message", receiveMessage);