我有这段代码,我已经将 MessageEvent
的来源设置为 *
,但控制台仍然提示 Blocked a frame with origin "AAAA"from访问来源为“BBBB”的框架。协议(protocol)、域和端口必须匹配。有人知道为什么吗?
var size = {
width: document.body.scrollWidth,
height: document.body.scrollHeight
}
var evt = new MessageEvent("dimensionMessage",{
"data": size,
"origin":"*"
});
window.parent.dispatchEvent(evt);
但是,如果我使用 window.parent.postMessage(size, "*")
,它会起作用。
最佳答案
错误消息告诉您,如果跨源 iframe 位于不同的源,则它通常不能从父级调用方法;其中包括 dispatchEvent
方法(否则,iframe 可能会在父页面中生成鼠标事件)。
postMessage
API 是一个异常(exception),它经过精确设计以允许以明确定义的方式进行跨域通信。
(将 origin
设置为 '*' 在这里对您没有帮助;一般来说,当通过 postMessage
发送消息时,浏览器会设置该属性>; 手动创建一个 MessageEvent
对象主要只在你想在接收页面中模拟接收外部消息时才有用)
关于javascript - postMessage() 和 dispatchEvent() 在源策略方面有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38758418/