国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > HTML > 正文

HTML5中postMessage API的基本使用

2020-03-24 16:16:03
字體:
供稿:網(wǎng)友
window.postMessage經(jīng)常被人們利用來做跨域數(shù)據(jù)傳遞,下面將為大家來介紹HTML5中的postMessage API基本使用教程,需要的朋友可以參考下

關(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ā)送信息:

//彈出一個(gè)新窗口 var domain = http://haorooms.com var myPopup = window.open(domain  + /windowPostMessageListener.html , myWindow //周期性的發(fā)送消息 setTimeout(function(){  //var message = 當(dāng)前時(shí)間是 + (new Date().getTime());  var message = {name: 站點(diǎn) ,sex: 男 //你在這里也可以傳遞一些數(shù)據(jù),obj等  console.log( 傳遞的數(shù)據(jù)是 + message);  myPopup.postMessage(message,domain); },1000);

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

接受的頁面

//監(jiān)聽消息反饋 window.addEventListener( message ,function(event) {  if(event.origin !== http://haorooms.com ) return; //這個(gè)判斷一下是不是我這個(gè)域名跳轉(zhuǎn)過來的  console.log( received response: ,event.data); },false);

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

2016520115816771.png (507×161)

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

//捕獲iframe var domain = http://haorooms.com var iframe = document.getElementById( myIFrame ).contentWindow; //發(fā)送消息 setTimeout(function(){  //var message = 當(dāng)前時(shí)間是 + (new Date().getTime());  var message = {name: 站點(diǎn) ,sex: 男 //你在這里也可以傳遞一些數(shù)據(jù),obj等  console.log( 傳遞的數(shù)據(jù)是: + message);  //send the message and target URI  iframe.postMessage(message,domain); },1000);

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

//響應(yīng)事件 window.addEventListener( message ,function(event) {  if(event.origin !== http://haorooms.com ) return;  console.log( message received: + event.data,event);  event.source.postMessage( holla back youngin! ,event.origin); },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 事件

 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 參數(shù)中有 data 屬性,就是子線程中返回的結(jié)果數(shù)據(jù)  worker.onmessage= function (event) {  // 把子線程返回的結(jié)果添加到 p 上  document.getElementById( result ).innerHTML +=  event.data+ br/  /script  /head  body onload= init()  p id= result /p  /body  /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é)果

var i=0; function timedCount(){  for(var j=0,sum=0;j j++){  for(var i=0;i 100000000;i++){  sum+=i;  // 調(diào)用 postMessage 向主線程發(fā)送消息  postMessage(sum); postMessage( Before computing, +new Date()); timedCount(); postMessage( After computing, +new Date());

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,更多相關(guān)內(nèi)容請關(guān)注PHP !

相關(guān)推薦:

新增HTML5的八類INPUT輸入

如何用HTML5操作WebSQL數(shù)據(jù)庫

以上就是HTML5中postMessage API的基本使用的詳細(xì)內(nèi)容,html教程

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時(shí)間聯(lián)系我們修改或刪除,多謝。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 乌兰浩特市| 正宁县| 云安县| 民县| 资兴市| 灵璧县| 藁城市| 冷水江市| 潜山县| 长沙县| 南京市| 北辰区| 南华县| 大方县| 陆丰市| 石狮市| 岱山县| 宁陕县| 溆浦县| 新晃| 乳山市| 铁岭县| 黄浦区| 浙江省| 四平市| 汶上县| 怀化市| 波密县| 泗洪县| 福州市| 丰顺县| 汝城县| 莆田市| 兰西县| 噶尔县| 梧州市| 于田县| 龙川县| 子长县| 页游| 积石山|