首页 > 解决方案 > 通过消息事件获取 iframe

问题描述

我在页面上有几个具有相同来源(但路径名不同)的 iframe。
每个 iframemessage通过postMessage.
父窗口监听这些事件:

window.addEventListener('message', function(event) {
  /* Get iframe element by event */
});

我想为每个事件获取源 iframe 元素。重要的限制是由于跨域

,我无法访问。UPD:在下面回答event.source.contentWindow

标签: javascriptiframepostmessage

解决方案


解决方案是比较event.sourceiframe.contentWindow

function getFrameByEvent(event) {
  return [].slice.call(document.getElementsByTagName('iframe')).filter(function(iframe) {
    return iframe.contentWindow === event.source;
  })[0];
}

这是更现代的版本:

function getFrameByEvent(event) {
  return Array.from(document.getElementsByTagName('iframe')).filter(iframe => {
    return iframe.contentWindow === event.source;
  })[0];
}

推荐阅读