主頁 > 知識庫 > HTML5中的postMessage API基本使用教程

HTML5中的postMessage API基本使用教程

熱門標簽:中紳電銷智能機器人 農(nóng)村住宅地圖標注 漳州人工外呼系統(tǒng)排名 鶴壁手機自動外呼系統(tǒng)怎么安裝 ai電銷機器人連接網(wǎng)關(guān) 跟電銷機器人做同事 威海營銷外呼系統(tǒng)招商 濟南辦理400電話 鄭州電銷外呼系統(tǒng)違法嗎

關(guān)于postMessage

window.postMessage雖然說是html5的功能,但是支持IE8+,假如你的網(wǎng)站不需要支持IE6和IE7,那么可以使用window.postMessage。關(guān)于window.postMessage,很多朋友說他可以支持跨域,不錯,window.postMessage是客戶端和客戶端直接的數(shù)據(jù)傳遞,既可以跨域傳遞,也可以同域傳遞。

應用場景

我只是簡單的舉一個應用場景,當然,這個功能很多地方可以使用。

假如你有一個頁面,頁面中拿到部分用戶信息,點擊進入另外一個頁面,另外的頁面默認是取不到用戶信息的,你可以通過window.postMessage把部分用戶信息傳到這個頁面中。(當然,你要考慮安全性等方面。)

代碼舉例

發(fā)送信息:

JavaScript Code復制內(nèi)容到剪貼板
  1. //彈出一個新窗口   
  2. var domain = 'http://haorooms.com';   
  3. var myPopup = window.open(domain    
  4.             + '/windowPostMessageListener.html','myWindow');   
  5.   
  6. //周期性的發(fā)送消息   
  7. setTimeout(function(){   
  8.     //var message = '當前時間是 ' + (new Date().getTime());    
  9.         var message = {name:"站點",sex:"男"}; //你在這里也可以傳遞一些數(shù)據(jù),obj等   
  10.     console.log('傳遞的數(shù)據(jù)是  ' + message);   
  11.     myPopup.postMessage(message,domain);   
  12. },1000);  

要延遲一下,我們一般用計時器setTimeout延遲再發(fā)用。

接受的頁面

JavaScript Code復制內(nèi)容到剪貼板
  1. //監(jiān)聽消息反饋   
  2. window.addEventListener('message',function(event) {   
  3.     if(event.origin !== 'http://haorooms.com'return; //這個判斷一下是不是我這個域名跳轉(zhuǎn)過來的   
  4.     console.log('received response:  ',event.data);   
  5. },false);  

如下圖,接受頁面得到數(shù)據(jù)

如果是使用iframe,代碼應該這樣寫:

JavaScript Code復制內(nèi)容到剪貼板
  1. //捕獲iframe   
  2. var domain = 'http://haorooms.com';   
  3. var iframe = document.getElementById('myIFrame').contentWindow;   
  4.   
  5. //發(fā)送消息   
  6. setTimeout(function(){   
  7.     //var message = '當前時間是 ' + (new Date().getTime());    
  8.         var message = {name:"站點",sex:"男"}; //你在這里也可以傳遞一些數(shù)據(jù),obj等   
  9.     console.log('傳遞的數(shù)據(jù)是:  ' + message);   
  10.         //send the message and target URI   
  11.     iframe.postMessage(message,domain);    
  12. },1000);  

接受數(shù)據(jù)

JavaScript Code復制內(nèi)容到剪貼板
  1. //響應事件   
  2. window.addEventListener('message',function(event) {   
  3.     if(event.origin !== 'http://haorooms.com'return;   
  4.     console.log('message received:  ' + event.data,event);   
  5.     event.source.postMessage('holla back youngin!',event.origin);   
  6. },false);  

上面的代碼片段是往消息源反饋信息,確認消息已經(jīng)收到。下面是幾個比較重要的事件屬性:

source – 消息源,消息的發(fā)送窗口/iframe。
origin – 消息源的URI(可能包含協(xié)議、域名和端口),用來驗證數(shù)據(jù)源。
data – 發(fā)送方發(fā)送給接收方的數(shù)據(jù)。

調(diào)用實例
1. 主線程中創(chuàng)建 Worker 實例,并監(jiān)聽 onmessage 事件

JavaScript Code復制內(nèi)容到剪貼板
  1. <html>    
  2. <head>    
  3. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">    
  4. <title>Test Web worker</title>    
  5. <script type="text/JavaScript">    
  6.  function init(){    
  7.   var worker = new Worker('compute.js');    
  8.   //event 參數(shù)中有 data 屬性,就是子線程中返回的結(jié)果數(shù)據(jù)   
  9.   worker.onmessage= function (event) {    
  10.    // 把子線程返回的結(jié)果添加到 div 上   
  11.    document.getElementById("result").innerHTML +=    
  12.       event.data+"<br/>";    
  13.   };    
  14.  }    
  15. </script>    
  16. </head>    
  17. <body onload="init()">    
  18. <div id="result"></div>    
  19. </body>    
  20. </html>  

在客戶端的 compute.js 中,只是簡單的重復多次加和操作,最后通過 postMessage 方法把結(jié)果返回給主線程,目的就是等待一段時間。而在這段時間內(nèi),主線程不應該被阻塞,用戶可以通過拖拽瀏覽器,變大縮小瀏覽器窗口等操作測試這一現(xiàn)象。這個非阻塞主線程的結(jié)果就是 Web Workers 想達到的目的。

2. compute.js 中調(diào)用 postMessage 方法返回計算結(jié)果

JavaScript Code復制內(nèi)容到剪貼板
  1. var i=0;    
  2.   
  3. function timedCount(){    
  4.  for(var j=0,sum=0;j<100;j++){    
  5.   for(var i=0;i<100000000;i++){    
  6.    sum+=i;    
  7.   }    
  8.  }    
  9.  // 調(diào)用 postMessage 向主線程發(fā)送消息   
  10.  postMessage(sum);    
  11. }    
  12.   
  13. postMessage("Before computing,"+new Date());    
  14. timedCount();    
  15. postMessage("After computing,"+new Date());  

標簽:咸陽 紅河 惠州 營口 文山 蘇州 萍鄉(xiāng) 甘南

巨人網(wǎng)絡(luò)通訊聲明:本文標題《HTML5中的postMessage API基本使用教程》,本文關(guān)鍵詞  HTML5,中的,postMessage,API,基本,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《HTML5中的postMessage API基本使用教程》相關(guān)的同類信息!
  • 本頁收集關(guān)于HTML5中的postMessage API基本使用教程的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章