关于iframe:Iframe标签的传值方式父发给子子接收父的消息-子发给父父接收子的消息

如何进行音讯通信(父发给子,子接管父的音讯; 子发给父,父接管子的音讯)
办法一: 间接通过获取父或者子的window来操作 (限度: 必须同域)

// 父调用子的办法:
 this.iframe.contentWindow.iframe的属性办法
// 或
document.getElementById("myIframe").contentWindow.iframe的属性办法

// 子调用父的办法:通过parent间接获取父的window
parent.document...

办法二:通过postMessage进行通信(限度: 须要父子约定)

// 父监听子音讯:
window.addEventListener("message", () => this.listenFunc());

// 子发给父音讯: 可通过window的属性找到对应的父(这里的parent示意间接上一级的父)
parent.postMessage(data, "*");  


// 父给子发消息
document.getElementById("iframe").contentWindow.postMessage(JSON.stringify(data), "*")

// 子监听父的音讯
window.addEventListener("message", () => this.listenFunc());

如何找到指定的子或者父window(如果iframe层级过多),又如何在发送音讯时不影响其余的message监听

while(true) {
    // 判断,找到要找的父window,能够通过在父的window上绑定属性来实现
  if(currentWindow.isParent = true) {  
    currentWindow.postMessage(data, "*")
  }

  if(currentWindow == window.top) {
    break;  // 避免死循环
  } else {
    currentWindow = currentWindwo.parent;
  }
}

origin是否有用event.origin 能够获取以后音讯的起源门路,通过判断以后iframe的url,判断是否是指定页面的消息来源

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理