就源策略而言,postMessage()和dispatchEvent()之间有什么区别?

Bla*_*ake 5 javascript postmessage dispatchevent

我有此代码,已将MessageEvent的原点设置为*,但控制台仍提示阻止原点为“ AAAA”的框架访问原点为“ BBBB”的框架。协议,域和端口必须匹配。有人知道为什么吗?

  var size = {
    width:  document.body.scrollWidth,
    height:  document.body.scrollHeight
  }
  var evt = new MessageEvent("dimensionMessage",{
      "data": size,
      "origin":"*"
  });
  window.parent.dispatchEvent(evt);
Run Code Online (Sandbox Code Playgroud)

但是,如果使用window.parent.postMessage(size, "*"),它会起作用。

don*_*dom 5

错误消息告诉您,如果跨源 iframe 位于不同的源中,则它通常无法从父级调用方法;包括dispatchEvent方法(否则,iframe 可能会在父页面中生成鼠标事件)。

postMessageAPI是一个例外的是,精确地设计,以允许在一个良好定义的方式跨来源连通。

(设置origin为 '*' 在这里对您没有帮助;通常,当通过 发送消息时,浏览器应该设置该属性postMessage;手动创建MessageEvent对象通常仅在您想在接收页面中进行模拟时才有用接收外部消息)