跨文檔消息通信可以確保iframe、標簽頁、窗口間安全地進行跨源通信。它把postMessage API定義為發(fā)送消息的標準方式。利用postMessage發(fā)送消息非常簡單,代碼如下所示:
chatFrame.contextWindow.postMessage('Hello,world','http://www.example.com');
接收消息時僅需在頁面種增加一個事件處理函數(shù)。當某個消息到達時,通過檢查消息的來源來決定是否對這條消息進行處理。
消息事件是一個擁有data(數(shù)據(jù))和origin(源)屬性的DOM事件。data屬性是發(fā)送方傳遞的實際消息,而origin屬性是發(fā)送來源。
postMessage API不僅可以勝任同源文檔間的通信,而且在瀏覽器不允許非同源通信的情況下,postMessage API也很有用。鑒于它的一致性和易用性,在同源文檔間通信時也推薦使用postMessage。在JavaScript環(huán)境的通信中始終應使用postMessage API,例如使用HTML5 Web Worker通信時。
1.1 理解源安全
HTML5榮光引入源(origin)的概念對域安全進行了闡明和改進。源是在網(wǎng)絡上用來建立信任關系的地址的子集。源由規(guī)則(scheme)、主機(host)、端口(post)組成。
源的概念中不考慮路徑。
HTML5定義了源的序列化。源在API和協(xié)議中以字符串的形式出現(xiàn)。
postMessage的安全規(guī)則確保了消息不會被傳遞到非預期的源頁面中。當發(fā)送消息時,由發(fā)送方制定接收方的源。如果發(fā)送方用來調(diào)用postMessage的窗口不具有特定的源(例如用戶跳轉到了其他站點),瀏覽器就不會傳送消息。
類似地,接受消息的時候,發(fā)送方的源也被作為消息的一部分。為避免偽造,消息源由瀏覽器提供。接收方可以決定處理哪些消息,以及忽略哪些消息。我們可以保留一份白名單,告訴瀏覽器僅僅處理可信源的消息。
最好永遠不要對來自第三方的字符串求值。再者,要避免使用eval方法處理應用內(nèi)部字符串。可以通過window.JSON或者json,.org解析器使用JSON。
1.2 跨文檔消息通信的瀏覽器支持情況
常用的做法是檢測XMLHttpRequest對象中是否存在withCredentials屬性:
JavaScript Code復制內(nèi)容到剪貼板
學習交流
- 綠毒越獄軟件 完美越獄4.21教程12-21
- htcg15怎么刷機?htcg15刷機教程12-21
- HTC hd7刷安卓2.2全教程12-21
- mpkg軟件下載和卸載的方法12-21
- 網(wǎng)站后臺系統(tǒng)設置的網(wǎng)站地址格式寫法07-09
- 防止重復提交js按鈕變灰07-09
- 不同時間顯示不同的廣告代碼07-09
- iframe框架調(diào)用高度自適應方法07-09
- 備份數(shù)據(jù)庫出現(xiàn)問題的解決方法07-09
熱門圖片
猜你喜歡的新聞