基於HTML5構建Web作業系統

2022-04-08 13:39:34 字數 3997 閱讀 9605

簡介: web 作業系統有著傳統作業系統無法比擬的優勢,如可以隨時隨地利用任何終端進行訪問,資料儲存在伺服器端,空間更大,資料安全性更好,可以利用伺服器端的 cpu、記憶體等資源進行更為複雜的運算。然而目前的 web 作業系統前端大多基於 flex、silverlight、activex 外掛程式等技術開發,存在著對移動裝置的支援性差,終端安全性差,開發難度大等缺點。

html5 是下一代 web 語言的標準,具有相容性好,安全性高,功能豐富,開發便捷等優點,特別適合如 web 作業系統一類的富客戶端網際網路應用的前端開發。本文將展示如何利用 html5 提供的多種新技術如:本地資料庫、多執行緒開發、**支援、離線程式設計等構建乙個基本的 web 作業系統。

簡介傳統的作業系統有著一些難以克服的缺點,如僅能在本地終端訪問,或僅支援有限的遠端訪問,限於本地終端的資源,計算能力薄弱,儲存空間有限,缺乏強大的防火牆等一系列安全機制,安全性較差。鑑於以上缺點,web 作業系統應運而生 – web 作業系統是一種基於瀏覽器的虛擬的作業系統,使用者通過瀏覽器可以在其中進行應用程式的操作,以及相關資料的儲存。web 作業系統提供的基本服務有文字文件的建立與儲存,音訊**檔案的**與儲存,提供對時間資訊的支援等,更高階的服務則包含即時通訊,郵件甚至遊戲等服務。web 作業系統克服了傳統作業系統的缺點,在網路的支援下,它可以在任何時間,任何地點經由任何支援 web 的終端進行訪問,可以利用伺服器端無限的計算及儲存資源,使用者資料儲存在伺服器端,安全性較高。

相關技術

目前構建 web 作業系統的前端技術主要有 flex、silverlight、activex 外掛程式等等,它們各有一些優缺點。

flex

flex 是乙個優秀的富客戶端應用框架,專注於頁面顯示,adobe 專業維護,統一穩定,而且其指令碼語言 actionscript3 是物件導向的,非常適合程式設計師使用。缺點則是耗能高,占用頻寬多,對移動應用的支援性差。

silverlight

silverlight 是由微軟推出的用以跟 flash 抗衡的 ria(富網際網路應用)解決方案,優點是具備硬體級的加速功能,但它目前仍不成熟,對非 windows 系統的支援性並不夠好,且學習難度較大。

activex 外掛程式

activex 外掛程式同樣是微軟推出的 ria 解決方案,它是乙個開放的解決方案,可以相容多種語言,不過它的缺點也是顯而易見的,使用者需要調整瀏覽器的安全等級並**外掛程式才能執行 ria 應用,極大地降低了安全性。

html5

為推動 web 標準化運動的發展,w3c 推出了下一代 html 的標準 – html5,為眾多的公司所支援,因此具有良好的前景。它有以下特點:首先,為增強使用者體驗,強化了 web 網頁的表現效能;其次,為適應 ria 應用的發展,追加了本地資料庫等 web 應用的功能;再次,由於高度標準化以及諸多瀏覽器廠商的大力支援,它的相容性和安全性非常高;最後它是一種簡潔的語言,容易為廣大開發者掌握。更為難得的是,由於節能和功耗低,在移動裝置上 html5 將具有更大的優勢。因此更適合如 web 作業系統一類的 ria 應用的前端開發。

系統簡介

本系統基於 html5 開發,利用 html5 引入的多種新技術如拖拽 api、**標籤、本地資料庫、draw api、多執行緒開發、離線程式設計等提供了乙個基本的 web 作業系統環境,包含了對桌面的支援、應用程式的支援,提供了乙個簡單的****器和記事本以及乙個時鐘,並對系統日誌進行了記錄,此外還提供了對離線狀態的支援。

桌面實現

系統對桌面的支援主要包括應用程式圖示的開啟與拖拽,以及桌面的上下文選單等。

桌面拖拽

桌面的布局由一定數量的 div 組成,它們按照次序依次排列在矩形的桌面上,為應用程式圖示的開啟與拖拽提供了基本的支援。

清單 1. 建立 div

var iconholder = document.createelement("div");

iconholder.id = 'iconholder' + i;

iconholder.classname = "iconholder";

maindiv.appendchild(iconholder);

html5 提供了對 drag 事件的支援,大大簡化了實現拖拽的難度。通過對 dragstart 事件的監聽,將被拖拽的應用程式圖示所在的 div 記錄下來,作為拖拽的源。

清單 2. 拖拽支援

iconholder.addeventlistener("dragstart", function(ev) , false);

iconholder.addeventlistener("drop", function(ev) else if(ev.currenttarget.firstchild)else

}, false);

通過對 drop 事件的監聽,可以獲取拖拽的源,以及拖拽的目標 div。若目標 div 為空,則將源 div 中的應用程式圖示轉移至目的 div 中。若目標 div 中已包含應用程式圖示,則將兩個圖示的位置互換。若**站圖示處於目標 div 中,**站將發揮作用並將源 div 中的應用程式圖示刪除。圖 1 顯示了桌面拖拽的效果。

圖 1. 桌面拖拽效果

程式開啟

程式可以以兩種方式開啟,左鍵點選或通過上下文選單開啟。

通過監聽 div 的 onclick 事件,獲取要開啟的應用程式 id,並利用 openapp 方法開啟相應的應用程式可實現對左鍵點選的支援。

清單 3. 左鍵點選

iconholder.onclick =  function(ev)

};通過監聽 div 的 oncontextmenu 事件,獲取要開啟的應用程式 id,並利用 openappcontextmenu 方法顯示相應應用程式的上下文選單,可實現對右鍵上下文選單的支援。

清單 4. 上下文選單

iconholder.oncontextmenu =  function(ev)

return false;

};利用相應應用程式的 id,可以獲取對應應用程式的指令碼,並執行,同時在系統日誌中記錄下相應的操作。

清單 5. 程式開啟

function openapp(appid)

清單 6. 開啟程式上下文選單

function openappcontextmenu(appid, ev){

var appcontextmenu = document.getelementbyid("appcontextmenu");

appcontextmenu.style.display="block";// 令上下文選單可見

appcontextmenu.style.pixeltop=ev.clienty;// 設定上下文選單位置

appcontextmenu.style.pixelleft=ev.clientx;

appcontextmenu.style.background = "#eee";

appcontextmenu.style.color = "black";

appcontextmenu.style.fontsize = "30";

appcontextmenu.style.width = "200px";

appcontextmenu.style.height = "220px";

appcontextmenu.style.opacity = 0.5;// 令上下文選單透明度為 50%

appcontextmenu.innerhtml = "";

// 獲取應用程式相應上下文選單的內容

var apps = getapps();

for(var i=0; i

if(apps[i].appid == appid){

for(var j=0; j

appcontextmenu.innerhtml += "

onclick=\"appcontextmenu.style.display='none';" +

apps[i].contextmenu[j].action + "\"

onmouseover='this.style.background=\"darkblue\"'

onmouseout='this.style.background=\"#eee\"'>"

+apps[i].contextmenu[j].name+"

HTML5 儲存 離線web應用

cookie儲存 每次http請求都會傳送cookie資訊,會使web變慢 每次http請求的cookie資訊不加密傳輸,不安全 cookie資訊量最大不能超過4kb 檢測瀏覽器是否支援該特性 function supports html5 storage html5儲存是基於鍵值對的 方法 set...

HTML5的Web儲存應用

一 介紹 html5 web儲存,乙個比cookie更好的本地儲存方式。1 什麼是html5 web儲存 使用html5可以在本地儲存使用者的瀏覽資料。早些時候,本地儲存使用的是cookie。但是web儲存需要更加的安全與快速,這些資料不會被儲存在伺服器上,但是這些資料只用於使用者請求 資料上,它也...

HTML5學習(四) Web表單

src rubber ies.controls audio metadata告訴瀏覽器先獲取音訊檔案開頭的資料,從而足以確定基本資訊 與audio有著相同的src controls preload auto play loop 某些html5瀏覽器支援的標準 對音訊格式 要支援多種格式,就要刪除sr...