前言
最近有一个需求是从当前项目带着token和uuid点击按钮跳转到另一个不同域名的项目去,在纠结了多个跨域通信的方法后,最后选择较简单的postMessage来进行通信
PostMessage
介绍:通常只有符合同源策略的两个页面才能相互通信,window.postMessage()方法提供了一种受控机制来规避此限制,就能安全的实现跨源通信
语法
otherWindow.postMessage(message, targetOrigin, [transfer])
参数介绍
otherWindow:其它窗口的引用,比如iframe的contentWindow属性,执行window.open返回的窗口对象,window.open打开过页面获取到的window.opener,或者是命名过或数值索引的window.frames
message:将要发送到其他 window 的数据,它将会被结构化克隆算法序列化。这意味着你可以不受什么限制的将数据对象安全的传送给目标窗口而无需自己序列化
targetOrigin:指定哪些窗口能接收到消息事件,其值可以是 *(表示无限制)或者一个 URI,在发送消息的时候,如果目标窗口的协议、主机地址或端口这三者的任意一项不匹配 targetOrigin 提供的值,那么消息就不会被发送;只有三者完全匹配,消息才会被发送
transfer(可选):是一串和 message 同时传递的 Transferable 对象。这些对象的所有权将被转移给消息的接收方,而发送一方将不再保有所有权(一般不会使用)
message中的属性有:
data:从其他 window 中传递过来的对象
origin:调用 postMessage 时消息发送方窗口的 origin . 这个字符串由 协议、“://“、域名、“ : 端口号”拼接而成,这个 origin 不能保证是该窗口的当前或未来 origin,因为 pos


66

被折叠的 条评论
为什么被折叠?



