使用postMessage的2个iframe的孩子之间的交流(communication betwe

2019-08-03 05:52发布

我有一些嵌入代码,用户可以把自己的网站。 它创建两个孩子在页面上的I帧。 我想有这些孩子能沟通。

我使用的是JavaScript的window.postMessage https://developer.mozilla.org/en-US/docs/DOM/window.postMessage

由于两个孩子的iframe不能直接通信,我使用的是母公司作为消息的中继。 然而,父母可以在不同的领域,因为它的嵌入代码。

当所有三个(父母和两个孩子)都在同一个域中,这是很容易,我有这个与安全检查检查工作e.origin是我自己的网站

# coffeescript
# host = "http://www.mysite.com"
host = "http://localhost"

receive_message = (e) ->
  console.log("received message from " + e.origin + ": " + e.data)
  return if e.origin != host

  if e.data == "show"
    ...
  else if e.data == "hide"
    ...

window.addEventListener("message", receive_message, false)

什么是优雅的方式来检查原产地时,家长可以在任何领域?

什么是一个好办法,允许脚本调试其中起点可以是localhost?

是否足以只检查数据PARAM如果对面有被传递无损/更改消息?

谢谢!

Answer 1:

为什么这么说,孩子的I帧不能直接通信? 实际上,他们可以。 你可以在孩子iframe中做的是使用window.parent属性来获取父窗口的引用,然后使用父母的frames属性来获得(在所有子I帧的参考frames财产给你这样引用数组) 。 在这之后,你可以使用postMessage每个这些引用,并设置所需的原点restrictoin中的postMessage调用,这样,你就一定只有合适的IFRAME得到消息。

请注意,这甚至会工作时,所有三个窗口(iframe1,父窗口和iframe2)都在不同的领域,因为iframe1不与父窗口(这将违反SOP)做任何事情,只取到在嵌套的iframe引用。

链接:

https://developer.mozilla.org/en-US/docs/DOM/window.parent

https://developer.mozilla.org/en-US/docs/DOM/window.frames



文章来源: communication between two iframe children using postMessage