如何检查消息(postMessage)来自哪个跨域iframe?

rsk*_*k82 6 javascript iframe postmessage cross-domain

我知道MessageEventsource属性是发送消息的窗口对象.现在,如何让这些信息检查主文档中的iframe(当然还有消息到达的主文档中)是该特定消息的来源?是唯一可用的选项来检查location.hrefevent.source窗口对象,然后循环中的所有I帧,以检查它匹配?如果主文档中存在具有相同源URL的iframe,该怎么办?

Iva*_*zak 2

如果您尝试读取location.href跨域 iframe/window 的属性,则会抛出异常,因为它违反了同源策略。您可以写入该属性,但无法读取。即使这可行,正如您所猜测的,您也会遇到具有相同 URL 问题的多个 iframe 的问题。

不管怎样,你能做的就是——建立某种消息发送确认的协议。换句话说,在接收消息 X 的 iframe 中,您将迭代父文档中的所有 iframe,并向每个 iframe 发送一条消息,询问“您向我发送了消息 X 吗?” 您可以对所有 iframe 进行编程来回答此类问题。当然,您必须为所有消息附加唯一的 ID,以便您知道哪个 iframe 确认它发送了哪条消息。

我认为您必须考虑为什么消息的接收者需要知道发送者是谁,以及为什么仅仅知道对该发送者的引用(event.source)还不够?如果发送者知道一些信息 - 那么发送者可以首先在消息中发送这些信息。