最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

HTML5中的postMessage API基本使用教程

Haorooms   發(fā)布時(shí)間:2016-05-20 11:58:08   作者:Aaron   我要評(píng)論
window.postMessage經(jīng)常被人們利用來(lái)做跨域數(shù)據(jù)傳遞,下面將為大家來(lái)介紹HTML5中的postMessage API基本使用教程,需要的朋友可以參考下

關(guān)于postMessage

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

應(yīng)用場(chǎng)景

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

假如你有一個(gè)頁(yè)面,頁(yè)面中拿到部分用戶信息,點(diǎn)擊進(jìn)入另外一個(gè)頁(yè)面,另外的頁(yè)面默認(rèn)是取不到用戶信息的,你可以通過(guò)window.postMessage把部分用戶信息傳到這個(gè)頁(yè)面中。(當(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ā)用。

接受的頁(yè)面

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

如下圖,接受頁(yè)面得到數(shù)據(jù)
2016520115816771.png (507×161)

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

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é)議、域名和端口),用來(lái)驗(yàn)證數(shù)據(jù)源。
data – 發(fā)送方發(fā)送給接收方的數(shù)據(jù)。

調(diào)用實(shí)例
1. 主線程中創(chuàng)建 Worker 實(shí)例

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

相關(guān)文章

  • HTML5實(shí)現(xiàn)的移動(dòng)端購(gòu)物車自動(dòng)結(jié)算功能示例代碼

    本文介紹HTML5實(shí)現(xiàn)移動(dòng)端購(gòu)物車自動(dòng)結(jié)算,通過(guò)WebStorage、事件監(jiān)聽(tīng)、DOM操作等技術(shù),確保實(shí)時(shí)更新與數(shù)據(jù)同步,優(yōu)化性能及無(wú)障礙性,提升用戶體驗(yàn),感興趣的朋友一起看看吧
    2025-06-18
  • HTML5 中的<button>標(biāo)簽用法和特征

    在HTML5中,<button>標(biāo)簽用于定義一個(gè)可點(diǎn)擊的按鈕,它是創(chuàng)建交互式網(wǎng)頁(yè)的重要元素之一,本文將深入解析HTML5中的<button>標(biāo)簽,詳細(xì)介紹其屬性、樣式以及實(shí)際
    2025-06-18
  • 基于 HTML5 Canvas 實(shí)現(xiàn)圖片旋轉(zhuǎn)與下載功能(完整代碼展示)

    本文將深入剖析一段基于 HTML5 Canvas 的代碼,該代碼實(shí)現(xiàn)了圖片的旋轉(zhuǎn)(90 度和 180 度)以及旋轉(zhuǎn)后圖片的下載功能,通過(guò)對(duì)代碼的解讀,我們可以學(xué)習(xí)到如何利用 Canvas API
    2025-06-18
  • HTML5 getUserMedia API網(wǎng)頁(yè)錄音實(shí)現(xiàn)指南示例小結(jié)

    本教程將指導(dǎo)你如何利用這一API,結(jié)合Web Audio API,實(shí)現(xiàn)網(wǎng)頁(yè)錄音功能,從獲取音頻流到處理和保存錄音,整個(gè)過(guò)程將逐步詳解,此外,還討論了getUserMedia API的使用限制和最
    2025-06-16
  • HTML5 搜索框Search Box詳解

    HTML5的搜索框是一個(gè)強(qiáng)大的工具,能夠有效提升用戶體驗(yàn),通過(guò)結(jié)合自動(dòng)補(bǔ)全功能和適當(dāng)?shù)臉邮剑梢詣?chuàng)建出既美觀又實(shí)用的搜索界面,這篇文章給大家介紹HTML5 搜索框Search Box
    2025-06-13
  • 全面解析HTML5中Checkbox標(biāo)簽

    Checkbox是HTML5中非常重要的表單元素之一,通過(guò)合理使用其屬性和樣式自定義方法,可以為用戶提供豐富多樣的交互體驗(yàn),這篇文章給大家介紹HTML5中Checkbox標(biāo)簽的深入全面解
    2025-06-13
  • HTML5無(wú)插件拖拽圖片上傳功能實(shí)現(xiàn)過(guò)程

    本實(shí)例展示了一種基于HTML5技術(shù)的圖片上傳功能,無(wú)需外部插件即可通過(guò)拖放圖片實(shí)現(xiàn)上傳,涉及到HTML5的拖放API和File API,以及使用CSS來(lái)增強(qiáng)用戶界面的交互性和視覺(jué)反饋,
    2025-05-16
  • HTML5 定位大全之相對(duì)定位、絕對(duì)定位和固定定位

    在HTML5和CSS中,定位(positioning)是控制元素在頁(yè)面上位置的重要機(jī)制,主要有四種定位方式:靜態(tài)定位(static)、相對(duì)定位(relative)、絕對(duì)定位(absolute)和固定定位(fixed),
    2025-05-13
  • HTML5中的Microdata與歷史記錄管理詳解

    Microdata作為HTML5新增的一個(gè)特性,它允許開(kāi)發(fā)者在HTML文檔中添加更多的語(yǔ)義信息,以便于搜索引擎和瀏覽器更好地理解頁(yè)面內(nèi)容,本文將探討HTML5中Microdata的使用方法以及
    2025-04-21
  • HTML5表格語(yǔ)法格式詳解

    在HTML語(yǔ)法中,表格主要通過(guò)< table >、< tr >和< td >3個(gè)標(biāo)簽構(gòu)成,本文通過(guò)實(shí)例代碼講解HTML5表格語(yǔ)法格式,感興趣的朋友一起看看吧
    2025-04-21

最新評(píng)論

闸北区| 柳林县| 上高县| 宝山区| 六安市| 城市| 吴江市| 彭阳县| 博爱县| 波密县| 体育| 闻喜县| 婺源县| 潜江市| 中方县| 项城市| 繁昌县| 颍上县| 哈尔滨市| 淮滨县| 临沭县| 延吉市| 富锦市| 遵化市| 仁布县| 澄迈县| 三明市| 大名县| 太湖县| 西安市| 邹平县| 独山县| 寿宁县| 满城县| 恩施市| 云南省| 洛浦县| 加查县| 开封县| 黎平县| 昌图县|