跨文檔消息傳送(cross-document messaging)簡稱XDM。指的是在來自不同域的頁面間傳遞消息。
- XDM的核心是postMessage()方法。這個方法的目的只有一個:向另一個地方傳遞數據。
- 對於XDM而言,‘另一個地方’指的是包含在當前頁面中的iframe元素,或者由當前頁面彈出的窗口。
- postMessage()方法接收兩個參數:一條消息和一個表示消息接收方來自哪個域的字符串。其中,第二個參數對保障安全通信非常重要,可以防止瀏覽器吧消息發送到不安全的地方。
- 接收到XDM消息時,會觸發window對象的message事件。觸發message事件後,傳遞給onmessage事件處理程序的事件對象會包含三個重要信息(屬性):1.data;2.origin;3.source;
示例:
//前提:www.a.com域中的頁面與位於一個內嵌框架中的www.b.com域中的頁面通信
//獲取到iframe的window
var iframeWindow = document.getElementById('myframe').contentWindow;
//向內嵌框架中發送一條消息:
iframeWindow.postMessage('A secret','http://www.a.com');
//最後一行代碼表示向內嵌框架中發送一條'A secret'的信息,並且消息的發送方所在域是 http://www.a.com
注意:使用XDM時候爲保險起見,使用postMessage()時,最好還是隻傳字符串。如果想傳入結構化的數據,最佳選擇是先在要傳入的數據上調用JSON.stringify(),通過postMessage()傳入得到的字符串,然後再在onmessage事件處理程序中調用JSON.parse().