子iframe之间的通信

时间:2019-05-11 23:44:47

标签: javascript iframe cors embed

我建立了一个通过iframe嵌入的播放器。如果嵌入了两个播放器,那么我想停止另一个播放器。因此,问题是,是否可以使用postMessage在两个子iframe之间进行通信,而无需拥有父级? Vimeo正在以某种方式这样做。如果我嵌入了两个vimeo播放器,并且一个播放,然后另一个播放,则第二个播放器停止第一个播放。怎么样? (证明:https://jsfiddle.net/3fy14orw/2/

在播放器中,我正在使用postMessage在播放器播放时在父窗口上触发一个事件。我确认这是可行的。我尝试使用实际的原点以及“ *”作为原点。

//in my player
window.parent.postMessage(data, "*");

其他玩家怎么知道?我已经尝试过了,

//tried adding this in my player    
window.parent.addEventListener('message', function(evt) {});

但这会引发错误。

"SecurityError: Blocked a frame with origin..."

我还尝试命名框架窗口,以及通过window.parent.frames对象访问它们,但这也引发了CORS问题。

假设:

  • 我的玩家有相同的血统。
  • 我的播放器可以嵌入到任何域中,而不仅仅是我自己的域中

1 个答案:

答案 0 :(得分:1)

Kinda hacky,但您可以在localStorage上建立一个沟通渠道。帧可以通过写入localStorage来发送消息,然后通过不断轮询localStorage来读取消息来读取消息。