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。