🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
1.跨文档消息传送(XDM),指的是在来自不同域的页面间传递消息。 2.XDM的核心是postMessage()方法。对于XDM而言,『另一个地方』指的是包含在当前页面中的iframe元素,或者由当前页面弹出的窗口。postMessage()方法接收两个参数:一条消息和一个表示消息接收方来自哪个域的字符串。第二个参数对保障安全通信非常重要,可以防止浏览器把消息发送到不安全的地方。**调用这个方法的对象是接收信息方。** ~~~ //注意:所有支持XDM的浏览器也支持iframe的contentWindow属性,这个属性获得该iframe的window对象 var iframeWindow = document.getElementById('myframe').contentWindow; iframeWindow.postMessage('A secret','http://www.wrow.com'); ~~~ 3.接收到XDM消息是,会触发window对象的message事件。触发message事件后,传递给onmessage处理程序的事件对象包含以下三方面的重要信息: (1)data:作为postMessage()第一个参数传入的字符串数据。 (2)origin:发送消息的文档所在的域(在本例中是"'http://www.wrow.com")。 (2)source:发送消息的文档的window对象的代理。这个代理对象主要用于在发送上一条消息的窗口上代用postMessage()方法。注意event.source只是代理,不能通过这个代理访问window对象的其他任何信息。 4.html5规范中提到postMessage()的第一个参数可以是JavaScript的任意基本类型或可复制的对象,然而并不是所有浏览器都做到了这点儿,部分浏览器只能处理字符串参数,所以我们在传递参数的时候需要使用JSON.stringify()方法对对象参数序列化。 5.通过haschange事件,可以知道URL的参数什么时候发生了变化,即什么时候该有所反应。而通过状态管理API,能够在不加载新页面的情况下改变浏览器的URL。为此需要使用history.pushState()方法,该方法可以接收3个参数:状态对象、新状态的标题和可选的相对URL。