這次帶給大家postMessage實作跨域、跨視窗訊息傳遞,postMessage實作跨域、跨視窗訊息傳遞的注意事項有哪些,以下就是實戰案例,一起來看一下。
平常做web開發的時候關於訊息傳遞,除了客戶端與伺服器傳值還有幾個經常會遇到的問題
1.頁面和其開啟的新視窗的數據傳遞
2.多視窗之間訊息傳遞
3.頁面與嵌套的iframe訊息傳遞
4.上面三個問題的跨域資料傳遞
postMessage()
這些問題都有一些解決方法,但html5引入的message的API可以更方便、有效、安全的解決這些難題。 postMessage()方法允許來自不同來源的腳本採用非同步方式進行有限的通信,可以實現跨文本檔、多視窗、跨域訊息傳遞。
postMessage(data,origin)方法接受兩個參數
1.data:要傳遞的數據,html5規格中提到該參數可以是JavaScript的任意基本型別或可複製的對象,然而並不是所有瀏覽器都做到了這點兒,部分瀏覽器只能處理字串參數,所以我們在傳遞參數的時候需要使用JSON.stringify()方法對對象參數序列化,在低版本IE中引用json2.js可以達到類似效果。
2.origin:字串參數,指明目標視窗的來源,協定+主機+埠號[+URL],URL會被忽略,所以可以不寫,這個參數是為了安全考慮,postMessage()方法只會將message傳遞給指定窗口,當然如果願意也可以建參數設為"*",這樣可以傳遞給任意窗口,如果要指定和當前窗口同源的話設置為"/ "。
http://test.com/index.html
<p> </p><p>Frame Color</p> <p> <iframe></iframe> </p>
我們可以在http://test.com/index.html透過postMessage()方法向跨域的iframe頁面http ://lsLib.com/lsLib.html傳遞訊息
window.onload=function(){ window.frames[0].postMessage('getcolor','http://lslib.com'); }
test.com上面的頁面向lslib.com發送了訊息,那麼在lslib.com頁面上如何接收訊息呢,監聽window的message事件就可以
#http://lslib.com/lslib.html
window.addEventListener('message',function(e){ if(e.source!=window.parent) return; var color=container.style.backgroundColor; window.parent.postMessage(color,'*'); },false);
這樣我們就可以接收任何視窗傳遞來的訊息了,為了安全起見,我們利用這時候的MessageEvent物件判斷了一下訊息來源,MessageEvent是一個這樣的東東
有幾個重要屬性
1.data:顧名思義,是傳遞來的message
2.source:傳送訊息的視窗物件
3.origin:傳送訊息視窗的來源(協定+主機+埠號)
這樣就可以接收跨域的訊息了,我們還可以發送訊息回去,方法類似
簡單的demo
在這個例子中,左邊的p會根據右邊iframe內p顏色變化而變化
nbsp;html> <title>Post Message</title> <p> </p><p>Frame Color</p> <p> <iframe></iframe> </p> <script> window.onload=function(){ window.frames[0].postMessage('getcolor','http://lslib.com'); } window.addEventListener('message',function(e){ var color=e.data; document.getElementById('color').style.backgroundColor=color; },false); </script> http://test.com/index.html
nbsp;html> <style> html,body{ height:100%; margin:0px; } </style> <p> click to change color </p> <script> var container=document.getElementById('container'); window.addEventListener('message',function(e){ if(e.source!=window.parent) return; var color=container.style.backgroundColor; window.parent.postMessage(color,'*'); },false); function changeColor () { var color=container.style.backgroundColor; if(color=='rgb(204, 102, 0)'){ color='rgb(204, 204, 0)'; }else{ color='rgb(204,102,0)'; } container.style.backgroundColor=color; window.parent.postMessage(color,'*'); } </script> http://lslib.com/lslib.html
在例子中頁面載入的時候主頁面向iframe發送'getColor' 請求(參數沒實際用處)
window.onload=function(){ window.frames[0].postMessage('getcolor','http://lslib.com'); }
iframe接收訊息,並把目前顏色傳送給主頁呢
window.addEventListener('message',function(e){ if(e.source!=window.parent) return; var color=container.style.backgroundColor; window.parent.postMessage(color,'*'); },false);
主頁接收訊息,更改自己p顏色
window.addEventListener('message',function(e){ var color=e.data; document.getElementById('color').style.backgroundColor=color; },false);
當點擊iframe事觸發其變色方法,把最新顏色發送給主頁面
function changeColor () { var color=container.style.backgroundColor; if(color=='rgb(204, 102, 0)'){ color='rgb(204, 204, 0)'; }else{ color='rgb(204,102,0)'; } container.style.backgroundColor=color; window.parent.postMessage(color,'*'); }
主頁面還是利用剛才監聽message事件的程序處理自身變色
window.addEventListener('message',function(e){ var color=e.data; document.getElementById('color').style.backgroundColor=color; },false);
相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!
推薦閱讀:
spring mvc+localResizeIMG實作H5端圖片壓縮上傳
#以上是postMessage實現跨域、跨視窗訊息傳遞的詳細內容。更多資訊請關注PHP中文網其他相關文章!

H5和HTML5是不同的概念:HTML5是HTML的一個版本,包含新元素和API;H5是基於HTML5的移動應用開發框架。 HTML5通過瀏覽器解析和渲染代碼,H5應用則需要容器運行並通過JavaScript與原生代碼交互。

HTML5的關鍵元素包括、、、、、等,用於構建現代網頁。 1.定義頭部內容,2.用於導航鏈接,3.表示獨立文章內容,4.組織頁面內容,5.展示側邊欄內容,6.定義頁腳,這些元素增強了網頁的結構和功能性。

HTML5和H5沒有區別,H5是HTML5的簡稱。 1.HTML5是HTML的第五個版本,增強了網頁的多媒體和交互功能。 2.H5常用於指代基於HTML5的移動網頁或應用,適用於各種移動設備。

HTML5是超文本標記語言的最新版本,由W3C標準化。 HTML5引入了新的語義化標籤、多媒體支持和表單增強,提升了網頁結構、用戶體驗和SEO效果。 HTML5引入了新的語義化標籤,如、、、等,使網頁結構更清晰,SEO效果更好。 HTML5支持多媒體元素和,無需第三方插件,提升了用戶體驗和加載速度。 HTML5增強了表單功能,引入了新的輸入類型如、等,提高了用戶體驗和表單驗證效率。

如何寫出乾淨高效的HTML5代碼?答案是通過語義化標籤、結構化代碼、性能優化和避免常見錯誤。 1.使用語義化標籤如、等,提升代碼可讀性和SEO效果。 2.保持代碼結構化和可讀性,使用適當縮進和註釋。 3.優化性能,通過減少不必要的標籤、使用CDN和壓縮代碼。 4.避免常見錯誤,如標籤未閉合,確保代碼有效性。

H5通過多媒體支持、離線存儲和性能優化提升網頁用戶體驗。 1)多媒體支持:H5的和元素簡化開發,提升用戶體驗。 2)離線存儲:WebStorage和IndexedDB允許離線使用,提升體驗。 3)性能優化:WebWorkers和元素優化性能,減少帶寬消耗。

HTML5代碼由標籤、元素和屬性組成:1.標籤定義內容類型,用尖括號包圍,如。 2.元素由開始標籤、內容和結束標籤組成,如內容。 3.屬性在開始標籤中定義鍵值對,增強功能,如。這些是構建網頁結構的基本單位。

HTML5是構建現代網頁的關鍵技術,提供了許多新元素和功能。 1.HTML5引入了語義化元素如、、等,增強了網頁結構和SEO。 2.支持多媒體元素和,無需插件即可嵌入媒體。 3.表單增強了新輸入類型和驗證屬性,簡化了驗證過程。 4.提供了離線和本地存儲功能,提升了網頁性能和用戶體驗。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)