window.postMessage() 方法可以安全地实现跨源通信。通常,对于两个不同页面的脚本,只有当执行它们的页面位于具有相同的协议(通常为https),端口号(443为https的默认值),以及主机 (两个页面的模数 Document.domain设置为相同的值) 时,这两个脚本才能相互通信。window.postMessage() 方法提供了一种受控机制来规避此限制,只要正确的使用,这种方法就很安全。
参考自:https://developer.mozilla.org...
这里的跨源是否指的就是跨域?
查了一下关于postMessage的使用基本都是iframe向父窗口传数据,那是不是不同协议和不同端口是无法通信的呢?
比如说我在localhost:3000启动一个页面,localhost:3500启动一个页面,可不可以进行通信呢
btn.addEventListener('click', () => {
try {
postMessage('helloWorld','localhost:3000' );
console.info('消息已经成功发送')
} catch (error) {
console.error(error)
}
})
我自己试了一下,会有报错,但是执行时成功的
这是不是说只能在子页面或者iframe这种情况下发送数据,不同端口不可以通信?
不好意思,审题不清,题主的报错截图不影响,是另外的图标请求问题,不影响的,详细了解可以戳这里
下面回答题主的其他问题:
可以跨域通信
如果跨域失败是另一种提示,Access-Control-Allow-Origin,,,,,
跨域包含跨端口,可以自行百度下什么是跨域,大概是:协议,域名,端口有一个不同,就是跨域。