如何获取 iFrame 的元素/名称(沙箱属性不允许同源)向父级发送 postMessage

Kyr*_*tap 5 html javascript iframe sandbox same-origin-policy

现在我有 3 个 iframe,名称为“iframe1”、“iframe2”和“iframe3”,它们都与父级同源,我可以控制双方。其中一个 iframe 向父级发送一些 postMessage。

我想实现两件事:

  1. 能够在父级内部识别发送 postMessage 的 iframe 的元素(或名称)。
  2. 但也要防止 iframe 访问父级的 Window 对象。

我在所有 iframe 上都使用了 HTML5 沙箱属性,允许除“允许同源”之外的所有内容。我成功地无法再从 iframe 访问父对象,问题是我无法识别发送 postMessage 的 iframe 的元素。那是因为“e.source.name”(e 是接收到的消息返回的事件对象)触发了沙箱访问冲突的 SecurityError 并且缺少“allow-same-origin”标志。

我测试了其他事件对象的属性:

e.origin - 返回 null。

e.source - 返回 Window 对象,但无法访问其属性和方法

问题是: 我怎样才能知道向父级发送 postMessage 的 iFrame 元素的名称并防止 iFrame 能够访问父级的对象?也许还有其他解决方法而不在 iframe 上使用沙箱?