濮阳杆衣贸易有限公司

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

HTML5中的postMessage API基本使用教程

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

關(guān)于postMessage

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

應(yīng)用場景

我只是簡單的舉一個(gè)應(yīng)用場景,當(dāng)然,這個(gè)功能很多地方可以使用。

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

代碼舉例

發(fā)送信息:

JavaScript Code復(fù)制內(nèi)容到剪貼板
  1. //彈出一個(gè)新窗口   
  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 = '當(dāng)前時(shí)間是 ' + (new Date().getTime());    
  9.         var message = {name:"站點(diǎn)",sex:"男"}; //你在這里也可以傳遞一些數(shù)據(jù),obj等   
  10.     console.log('傳遞的數(shù)據(jù)是  ' + message);   
  11.     myPopup.postMessage(message,domain);   
  12. },1000);  

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

接受的頁面

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

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

如果是使用iframe,代碼應(yīng)該這樣寫:

JavaScript Code復(fù)制內(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 = '當(dāng)前時(shí)間是 ' + (new Date().getTime());    
  8.         var message = {name:"站點(diǎn)",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復(fù)制內(nèi)容到剪貼板
  1. //響應(yīng)事件   
  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);  

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

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

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

JavaScript Code復(fù)制內(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 中,只是簡單的重復(fù)多次加和操作,最后通過 postMessage 方法把結(jié)果返回給主線程,目的就是等待一段時(shí)間。而在這段時(shí)間內(nèi),主線程不應(yīng)該被阻塞,用戶可以通過拖拽瀏覽器,變大縮小瀏覽器窗口等操作測試這一現(xiàn)象。這個(gè)非阻塞主線程的結(jié)果就是 Web Workers 想達(dá)到的目的。

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

JavaScript Code復(fù)制內(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());  

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

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《HTML5中的postMessage API基本使用教程》,本文關(guān)鍵詞  HTML5,中的,postMessage,API,基本,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(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)民參考!
  • 推薦文章
    平定县| 浙江省| 鄂尔多斯市| 哈巴河县| 盐池县| 诏安县| 岳阳市| 台湾省| 东乌| 彭州市| 三门峡市| 克山县| 东乌珠穆沁旗| 鄂尔多斯市| 仁怀市| 安泽县| 遂溪县| 吉林市| 巢湖市| 江川县| 汉中市| 大庆市| 江都市| 广东省| 灌南县| 那曲县| 襄樊市| 同仁县| 宜黄县| 绵竹市| 开江县| 徐汇区| 邮箱| 都江堰市| 浦城县| 屏边| 米脂县| 灵璧县| 类乌齐县| 津南区| 新巴尔虎左旗|