關於postMessage,雖然說是html5的功能但是支援IE8+,假如你的網站不需要支援IE6和IE7,那麼可以使用window.postMessage。既可以跨域傳遞,也可以同域傳遞。
我只是簡單的舉一個應用場景,當然,這個功能很多地方可以使用。
假如你有一個頁面,頁面中拿到部分用戶信息,點擊進入另外一個頁面,另外的頁面默認是取不到用戶信息的,你可以通過window.postMessage把部分用戶信息傳到這個頁面中。 (當然,你要考慮安全性等方面。)
程式碼範例
發送訊息:
##JavaScript Code複製內容到剪貼簿//弹出一个新窗口 var domain = 'https://haorooms.com'; var myPopup = window.open(domain + '/windowPostMessageListener.html','myWindow'); //周期性的发送消息 setTimeout(function(){ //var message = '当前时间是 ' + (new Date().getTime()); var message = {name:"站点",sex:"男"}; //你在这里也可以传递一些数据,obj等 console.log('传递的数据是 ' + message); myPopup.postMessage(message,domain); },1000);要延遲一下,我們一般會用計時器setTimeout延遲再發用。 接受的頁面JavaScript Code複製內容到剪貼簿//監聽訊息回饋
window.addEventListener('message',function(event) { if(event.origin !== 'https://haorooms.com') return; //这个判断一下是不是我这个域名跳转过来的 console.log('received response: ',event.data); },false);如下圖,接受頁面得到資料
//捕获iframe var domain = 'https://haorooms.com'; var iframe = document.getElementById('myIFrame').contentWindow; //发送消息 setTimeout(function(){ //var message = '当前时间是 ' + (new Date().getTime()); var message = {name:"站点",sex:"男"}; //你在这里也可以传递一些数据,obj等 console.log('传递的数据是: ' + message); //send the message and target URI iframe.postMessage(message,domain); },1000);接受資料JavaScript Code複製內容到剪貼板
//响应事件 window.addEventListener('message',function(event) { if(event.origin !== 'https://haorooms.com') return; console.log('message received: ' + event.data,event); event.source.postMessage('holla back youngin!',event.origin); },false);上面的程式碼片段是往訊息來源回饋訊息,確認訊息已經收到。以下是幾個比較重要的事件屬性:source – 訊息來源,訊息的傳送視窗/iframe。
origin – 訊息來源的URI(可能包含協定、網域名稱和連接埠),用來驗證資料來源。
data – 發送方傳送給接收方的資料。
主執行緒中建立Worker 實例,並監聽onmessage 事件
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <title>Test Web worker</title> <script type="text/JavaScript"> function init(){ var worker = new Worker('compute.js'); //event 参数中有 data 属性,就是子线程中返回的结果数据 worker.onmessage= function (event) { // 把子线程返回的结果添加到 p 上 document.getElementById("result").innerHTML += event.data+"<br/>"; }; } </script> </head> <body onload="init()"> <p id="result"></p> </body> </html>
var i=0; function timedCount(){ for(var j=0,sum=0;j<100;j++){ for(var i=0;i<100000000;i++){ sum+=i; } } // 调用 postMessage 向主线程发送消息 postMessage(sum); } postMessage("Before computing,"+new Date()); timedCount(); postMessage("After computing,"+new Date());
##相信看了這些案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!
相關閱讀:
以Js操作HTTP的Cookie的實作步驟html 邊框虛線的實作步驟AJAX的常用語法是什麼以上是H5裡的postMessage API圖文詳解 詳細介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!