【问题标题】:Synchronous postMessage同步 postMessage
【发布时间】:2018-02-22 15:29:59
【问题描述】:

有没有办法让 postMessage “同步调用”? 意思:

  • 从父级到 iFrame 执行 postMessage
  • 等到父母收到一条消息(从 iFrame 发送)

例如:

function doSomething() {
   targetiFrame.postMessage('actionA');
   handleMessage('actionA').then(function() {
      return true;
   });
}

function handleMessage(action) {
   return new Promise(function(resolve, reject) {
   });
}

当然,这不起作用,因为我触发了handleMessage,而只有在收到正确的消息时才应该触发它。有没有办法等到收到“actionA”消息,然后才以 return true 结束函数?

【问题讨论】:

  • 这听起来像XY problem。为什么你需要使这个同步?你想解决什么问题?
  • 我真正需要的是 doSomething 将返回一个只能在 iFrame 中运行的函数的响应
  • @co.zohar - 这个问题解决了吗?如果是,你能回答你自己的问题吗? 10x
  • @vsync 嗨,请查看下面的答案

标签: javascript postmessage


【解决方案1】:

我解决了这样的问题:

let doSomethingResolveCallback;
let doSomethingRejectCallback;

function doSomething() {
  return new Promise(resolve, reject) => {
    doSomethingResolveCallback = resolve;
    doSomethingRejectCallback = reject;
    targetiFrame.postMessage('actionA');
  }
}

// handles messages from the iFrame
function handleMessage(event) {
   if (event.action === "answerToActionA") {
     doSomethingResolveCallback(event.data);
   }
}

【讨论】:

  • 是什么让这个解决方案同步
猜你喜欢
  • 1970-01-01
  • 2011-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-25
  • 1970-01-01
  • 1970-01-01
  • 2013-02-26
相关资源
最近更新 更多