HTML5之通訊和多執行緒

2022-05-24 03:06:10 字數 1683 閱讀 8764

html通訊

跨文件訊息傳輸

html5提供了在網頁文件之間相互接收和傳送資訊的功能,使用這個功能,只要獲取到網頁所在視窗物件的例項,不僅同源(域+埠)的網頁可以相互通訊,甚至可以實現跨域通訊。涉及到兩個window的api,window的message事件

window.addeventlistener("message",function(ev),false)

//或window.onmessage=function(ev)

其中ev是messageevent物件,它的其中幾個屬性:data:是訊息內容,timestamp:時間戳,origin:**url位址,source:**視窗物件。

另乙個就是window物件的postmessage方法了:

otherwindow.postmessage(data,targetorigin)
其中data是訊息文字,targetorigin是物件視窗的url位址(如""),可以在url使用萬用字元「*」。otherwindow是視窗物件,可以是windows.open返回的物件,或通過window.frames陣列指定的序號(index)或名字獲取的單個frame所屬的視窗物件。

示例:主頁面是「和嵌入它的frame頁面「index.html」進行通訊,前者html**:

接收到的資訊:

後者

index.html

接收到的資訊:

效果

web socket通訊

請參考我的另一篇部落格,只是不用自己封裝伺服器了,現在很多web server都支援websocket了,如iis7、tomcat、apache、resin、nginx等等。

多執行緒

建立執行緒

在html5中增加了乙個web workers api,通過它可以實現web平台的多執行緒,你可以將耗時過長的處理交給後台執行緒(html5中稱為worker)執行,從而解決html5之前因為某個處理耗時過長而跳出乙個提示,導致使用者不得不結束或關閉瀏覽器的尷尬局面。

建立後台執行緒非常簡單,只需要在worker類構造器中獎需要在後台執行執行緒執行的指令碼件的url位址作為引數,然後建立worker物件就可以了,如

var worker=new worker('worker.js');
後台執行緒是不能訪問頁面或視窗物件的,因此需要前台和後台互傳資料,這有點類似上面的文件訊息傳輸,接收通過onmessage事件,傳送通過postmessage方法。

示例:後台指令碼是worker.js,**如下:

onmessage=function(ev)

postmessage(res);

}

前台是index.html頁面,**如下:

的10次方=0

效果

執行緒中可使用的變數、函式與類

終止 web worker

當我們建立 web worker 物件後,它會繼續監聽訊息(即使在外部指令碼完成之後)直到其被終止為止。如需終止 web worker,並釋放瀏覽器/計算機資源,請使用 terminate() 方法

w.terminate();

HTML5學習之WebWork多執行緒處理

多執行緒技術在服務端技術中已經發展的很成熟了,而在web端的應用中卻一直是雞肋 在新的標準中,提供的新的webwork api,讓前端的非同步工作變得異常簡單。使用 建立乙個worker物件,指向乙個js檔案,然後通過worker物件往js檔案傳送訊息,js檔案內部的處理邏輯,處理完畢後,再傳送訊息...

HTML5多執行緒之 Worker 執行緒完成輪詢

有時,瀏覽器需要輪詢伺服器狀態,以便第一時間得知狀態改變。這個工作可以放在 worker 裡面。function createworker f var pollingworker createworker function e setinterval function 1000 pollingwor...

HTML5學習之 HTML 5 拖放

拖放 drag 和 drop 是 html5 標準的組成部分。拖放是一種常見的特性,即抓取物件以後拖到另乙個位置。在 html5 中,拖放是標準的一部分,任何元素都能夠拖放。internet explorer 9 firefox opera 12 chrome 以及 safari 5 支援拖放。注釋...