專利名稱:網(wǎng)絡(luò)應(yīng)用的運行裝置及方法
技術(shù)領(lǐng)域:
本發(fā)明涉及互聯(lián)網(wǎng)應(yīng)用技術(shù)領(lǐng)域,尤其涉及ー種網(wǎng)絡(luò)應(yīng)用(WebApp)的運行裝置以及運行方法。
背景技術(shù):
WebApp是使用網(wǎng)絡(luò)(Web)頁面作為基礎(chǔ),完成某種功能的應(yīng)用。相對于普通的Web頁面,WebApp更強調(diào)功能性,比如郵箱,小游戲,日程表等。WebApp框架是指WebApp的運行環(huán)境,比如采用何種瀏覽器內(nèi)核,何種編程接ロ,有哪些接ロ可以由WebApp調(diào)用等。目前已經(jīng)有很多的WebApp框架,包括谷歌(Google)公司現(xiàn)在有Chrome的WebApp框架,蘋果(Apple)公司的WebApp框架,以及微軟(Microsoft)公司的WebApp框架。但這·些WebApp框架需要運行在瀏覽器上,其能力僅限于瀏覽器內(nèi)部,從行為上看,仍然屬于ー個網(wǎng)頁。Chrome雖然進行了擴展,但也僅限于訪問收藏夾,歷史紀錄等瀏覽器相關(guān)的數(shù)據(jù),本質(zhì)上仍然屬于Web的應(yīng)用。基于Web的WebApp本身有許多優(yōu)點,比如部署更新都非常方便,但是能力卻受到瀏覽器的限制。不能進行超越瀏覽器限制的操作,比如訪問本地文件,直接使用TCP或者UDP進行通訊等。當然最近的HTML5已經(jīng)開放了部分能力,但仍然是非常有限的。相對于客戶端程序,Web的能力受到很大的限制。在互聯(lián)網(wǎng)的環(huán)境下,如果要搭建ー個WebApp平臺,在此平臺上提供各種各樣的能力,然后基于這種能力來開發(fā)各種各樣的應(yīng)用,面臨ー個開發(fā)環(huán)境選擇的問題,如果是純Web的環(huán)境,則某些能力很難提供,比如基于TCP或者UDP的數(shù)據(jù)服務(wù)、視頻、傳文件等客戶端才能實現(xiàn)的能力。如果完全采用客戶端程序,則有兩個問題其ー是安全問題,因為客戶端程序擁有非常大的權(quán)限,可以對系統(tǒng)進行任意操作,有安全風險;其ニ是開發(fā)門檻的問題,要開發(fā)ー個好的客戶端程序需要技術(shù)要求更高更嚴格的開發(fā)工程師。對于ー個WebApp平臺來說,對技術(shù)的高要求是不利于平臺的推廣的。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明的主要目的是提供ー種WebApp的運行裝置及方法,以擴展WebApp框架的能力,同時又降低WebApp的技術(shù)開發(fā)門濫。本發(fā)明的技術(shù)方案是這樣實現(xiàn)的ー種網(wǎng)絡(luò)應(yīng)用的運行裝置,包括網(wǎng)絡(luò)應(yīng)用對應(yīng)的瀏覽器內(nèi)核和腳本引擎,該裝置還包括本地組件和自定義對象,其中所述本地組件用于提供基礎(chǔ)的客戶端功能;所述自定義對象用于封裝本地組件,形成特定的客戶端功能;所述腳本引擎中設(shè)置有所述自定義對象對應(yīng)的腳本對象;所述瀏覽器內(nèi)核嵌入了所述腳本對象,并通過運行腳本調(diào)用所嵌入的腳本對象,運行所述自定義對象的特定的客戶端功能。
優(yōu)選的,該裝置包括瀏覽器進程;所述自定義對象、腳本引擎、以及瀏覽器內(nèi)核運行在同一瀏覽器進程中,所述本地組件也運行在該瀏覽器進程中,或者所述本地組件運行在與該瀏覽器進程相獨立的進程中。優(yōu)選的,在同時運行ー個以上網(wǎng)絡(luò)應(yīng)用時,所有網(wǎng)絡(luò)應(yīng)用對應(yīng)的瀏覽器內(nèi)核分別運行在不同的瀏覽器進程中,或者其中至少兩個網(wǎng)絡(luò)應(yīng)用對應(yīng)的瀏覽器內(nèi)核共享ー個瀏覽器進程。優(yōu)選的,所述瀏覽器進程中進ー步包括沙箱保護單元,用于對瀏覽器進程進行防護。 優(yōu)選的,該裝置進ー步包括框架進程,該框架進程中包括容器窗口和瀏覽器代理對象,所述瀏覽器進程中進ー步包括存根對象;所述框架進程的瀏覽器代理對象用于將所述容器窗口內(nèi)指定區(qū)域的相關(guān)信息發(fā)送給瀏覽器進程的存根對象,并由該存根對象轉(zhuǎn)發(fā)給對應(yīng)的瀏覽器內(nèi)核,所述瀏覽器內(nèi)核根據(jù)收到的信息渲染網(wǎng)絡(luò)應(yīng)用的界面信息,并通過本瀏覽器進程的存根對象將該界面信息跨進程發(fā)送給所述框架進程的瀏覽器代理對象;該瀏覽器代理對象將收到的界面信息展示在所述容器窗ロ的指定區(qū)域。優(yōu)選的,所述本地組件為本地服務(wù)組件,所述自定義對象為服務(wù)代理對象。ー種網(wǎng)絡(luò)應(yīng)用的運行方法,包括封裝本地組件,形成具有特定客戶端功能的自定義對象;在腳本引擎中設(shè)置所述自定義對象的腳本對象; 在瀏覽器內(nèi)核嵌入所述腳本對象;當網(wǎng)絡(luò)應(yīng)用運行時,瀏覽器內(nèi)核通過運行腳本調(diào)用所嵌入的腳本對象,運行所述自定義對象的特定的客戶端功能。優(yōu)選的,在網(wǎng)絡(luò)應(yīng)用運行時,在同一瀏覽器進程中運行所述自定義對象、腳本引擎、瀏覽器內(nèi)核,在與該瀏覽器進程相獨立的進程中運行所述本地組件;或者在同一瀏覽器進程中運行所述本地組件、自定義對象、腳本引擎、以及瀏覽器內(nèi)核。優(yōu)選的,該方法進ー步設(shè)置可同時打開的最大瀏覽器進程數(shù);當同時運行的網(wǎng)絡(luò)應(yīng)用數(shù)小于或等于所述最大瀏覽器進程數(shù)吋,則每個網(wǎng)絡(luò)應(yīng)用對應(yīng)的瀏覽器內(nèi)核分別運行在不同的瀏覽器進程中;否則至少兩個網(wǎng)絡(luò)應(yīng)用對應(yīng)的瀏覽器內(nèi)核共享ー個瀏覽器進程。優(yōu)選的,該方法進ー步啟動與所述瀏覽器進程相互獨立的框架進程,所述框架進程中運行容器窗口和瀏覽器代理對象,所述瀏覽器進程中進ー步運行存根對象;所述框架進程的瀏覽器代理對象將所述容器窗口內(nèi)指定區(qū)域的相關(guān)信息發(fā)送給瀏覽器進程的存根對象,并由該存根對象轉(zhuǎn)發(fā)給對應(yīng)的瀏覽器內(nèi)核;所述瀏覽器內(nèi)核根據(jù)收到的信息渲染網(wǎng)絡(luò)應(yīng)用的界面信息,并通過本瀏覽器進程的存根對象將該界面信息跨進程發(fā)送給所述框架進程的瀏覽器代理對象;該瀏覽器代理對象將收到的界面信息展示在所述容器窗ロ的指定區(qū)域。優(yōu)選的,所述本地組件為本地服務(wù)組件,所述自定義對象為服務(wù)代理對象。與現(xiàn)有技術(shù)相比,本發(fā)明結(jié)合了網(wǎng)絡(luò)和客戶端的優(yōu)點,公開了基于客戶端擴展的WebApp框架,使用內(nèi)嵌腳本對象的方式提供本地客戶端功能,從而可以把本地服務(wù)接入到Web的腳本控件,讓W(xué)eb頁面的腳本可以調(diào)用到本地的客戶端組件,從而擴展了 WebApp框架的能力,可以設(shè)計出更強大的WebApp。同時由于本發(fā)明以瀏覽器內(nèi)核為基礎(chǔ),因此開發(fā)環(huán)境為Web,可以利用Web的優(yōu)勢搭建出豐富多彩的應(yīng)用界面,并且容易部署和發(fā)布,開發(fā)門檻低,技術(shù)流行、廣泛,且安全性好,不會對本地系統(tǒng)造成破壞。要實現(xiàn)腳本里面調(diào)用本地客戶端的組件,IE的ActiveX和其它瀏覽器的NP插件也可以實現(xiàn),但是所不同的是,ActiveX組件和NP插件都需要安裝,需要在頁面里面指定,而且開發(fā)ActiveX和NP插件本身是需要比較高的技術(shù)門檻的,使用的時候需要在腳本里面具體指定ー個ActiveX控件或者NP插件,開發(fā)使用比較麻煩。而本發(fā)明是直接在腳本控件里面嵌入腳本對象,訪問起來是更方便的,技術(shù)開發(fā)門檻也更低。更重要是安全性問題,如果頁面可以使用ActiveX或者NP插件,則可以直接執(zhí)行本地代碼,其功能就是不可控的,通過內(nèi)嵌腳本對象的方式,可以完全控制腳本的訪問范圍,而且還可以進行權(quán)限控制,提高了WebApp框架的安全性。本發(fā)明可以提供ー種新的應(yīng)用開發(fā)模式,即利用一個客戶端軟件運行所有WebApp,使用瀏覽器進行界面的展現(xiàn),并提供相關(guān)客戶端服務(wù)的擴展。使得WebApp獲得Web的開發(fā)速度和更新頻率,并具備客戶端的應(yīng)用能力。 進ー步的,本發(fā)明通過跨進程渲染機制進行wp界面的展示,從而使瀏覽器內(nèi)核與框架進程完全獨立,即使瀏覽器內(nèi)核崩潰也不會影響到框架進程的正常運行,從而提高了wp框架的整體穩(wěn)定性;同吋,由于框架進程所做的邏輯操作非常少并且簡單,不會受到瀏覽器內(nèi)核和服務(wù)進程的性能問題的影響,因此保證了 WP界面操作的流暢性,提升了 WP框架的整體性能;另外,由于把瀏覽器內(nèi)核放到一個專門的瀏覽器進程里,可以防止惡意頁面對WP系統(tǒng)的破壞,提升了安全性。
圖I為本發(fā)明所述WebApp運行裝置的示意圖;圖2a為本發(fā)明所述WebApp運行裝置的本地組件運行于瀏覽器進程的示意圖;圖2b為本發(fā)明所述WebApp運行裝置的本地組件運行于獨立進程的示意圖;圖3a為本發(fā)明可實現(xiàn)的一種新服務(wù)接入方式的示意圖;圖3b為本發(fā)明可實現(xiàn)的另ー種新服務(wù)接入方式的示意圖;圖4a為本發(fā)明所述瀏覽器內(nèi)核獨享瀏覽器進程的示意圖;圖4b為本發(fā)明所述瀏覽器內(nèi)核共享瀏覽器進程的示意圖;圖5為本發(fā)明所述WebApp框架的跨進程渲染機制的ー種示意圖;圖6為本發(fā)明所述跨進程渲染網(wǎng)頁圖像的ー種示意圖;圖7為本發(fā)明具有跨進程渲染機制的一種服務(wù)接入方式示意圖;圖8為本發(fā)明對瀏覽器進程進行沙箱保護的示意圖;圖9為本發(fā)明WebApp運行方法的一種流程圖。
具體實施例方式下面結(jié)合附圖及具體實施例對本發(fā)明再作進ー步詳細的說明。為了實現(xiàn)網(wǎng)絡(luò)優(yōu)勢和客戶端優(yōu)勢相結(jié)合,增強web頁面的能力,本發(fā)明需要在腳本引擎中自定義腳本對象,并對瀏覽器內(nèi)核進行改造,將自定義的腳本對象嵌入到瀏覽器內(nèi)核中,便于腳本調(diào)用。
圖I為本發(fā)明所述WebApp運行裝置的示意圖。參見圖1,該WebApp的運行裝置包括WebApp對應(yīng)的瀏覽器內(nèi)核和腳本引擎,還包括本地組件和自定義對象,其中所述本地組件用于提供基礎(chǔ)的客戶端功能;所述自定義對象用于封裝本地組件,形成特定的客戶端功能;所述腳本引擎中設(shè)置有所述自定義對象對應(yīng)的腳本對象;所述瀏覽器內(nèi)核嵌入了所述腳本對象,并通過運行腳本調(diào)用所嵌入的腳本對象,運行所述自定義對象的特定的客戶端功能。下面對圖I所具體說明。瀏覽器內(nèi)核里面可以運行腳本,腳本是由腳本引擎提供運行環(huán)境的,對于瀏覽器來說,腳本引擎里面內(nèi)置了 window,document等對象,腳本可以對這些對象進行控制,從而可以動態(tài)修改頁面。但腳本弓I擎也提供了一些機制,可以嵌入自定義的對象,本發(fā)明就是利用腳本引擎的嵌入機制,嵌入自定義的對象。一個自定義對象在腳本引擎里面映射有ー個腳本對象,供給瀏覽器內(nèi)核的腳本使用,同時這個腳本對象的實現(xiàn)是由本地組件來提供的,即可以將本地組件封裝成自定義對象,每個自定義對象實現(xiàn)的功能由本地組件來實現(xiàn),這樣就可以讓瀏覽器里面的腳本訪問到外部的本地組件了,從而使內(nèi)部腳本可以訪問外部的本地組件,極大的增強了 Web頁面的能力,同時開發(fā)門檻低,易于 使用,便于擴展。至于具體的向瀏覽器內(nèi)核嵌入腳本對象的方式,不同的瀏覽器內(nèi)核,其實現(xiàn)方法也不相同。本發(fā)明所述的瀏覽器內(nèi)核不限于特定的瀏覽器內(nèi)核,現(xiàn)在流行的瀏覽器內(nèi)核有IE, Chrome, Firefox,它們都提供了嵌入腳本對象的能力。其中IE是提供了非常明確的機制,IE對于window對象里面的external成員提供了專門的接ロ來擴展。IE是基于COM的,所以只要提供相關(guān)的COM對象,就非常容易實現(xiàn)external對象的擴展,通過external,可以實現(xiàn)腳本到COM對象的調(diào)用。而Chrome和Firefox由于本身是開源的,所以可以直接修改其源代碼嵌入自定義的腳本對象,Chrome和Firefox本身的腳本引擎也都提供了自定義腳本對象的方法。至于具體的腳本引擎嵌入自定義對象的機制,由于不同腳本引擎嵌入自定義對象的機制可能不同,因此在具體嵌入時可以參見該腳本引擎的規(guī)范。圖2a為本發(fā)明所述WebApp運行裝置的本地組件運行于瀏覽器進程的示意圖。參見圖2a,WebApp運行裝置在WebApp運行時需包括瀏覽器進程,所述本地組件、自定義對象、腳本引擎、以及瀏覽器內(nèi)核可以運行在同一瀏覽器進程中。當ー個以上WebApp同時啟動時,ー個以上WebApp對應(yīng)的瀏覽器內(nèi)核可能占用一個以上的瀏覽器進程,如果每個瀏覽器進程里面都有本地組件則是ー種資源的浪費,也不便于統(tǒng)ー管理,所以在ー種優(yōu)選實施方式中可以把所有本地組件獨立為ー個進程。圖2b為本發(fā)明所述WebApp運行裝置的本地組件運行于獨立進程的示意圖,參見圖2b,在每個瀏覽器進程里面都會有該本地組件的代理對象即所述自定義對象,該自定義對象用于把本瀏覽器進程的調(diào)用組件的請求發(fā)送到本地組件所在的獨立進程,然后該獨立進程進行相關(guān)的本地組件操作。這樣既節(jié)省了資源,又便于管理。在本發(fā)明這種基于客戶端擴展的WebApp模式下,可以產(chǎn)生一種新的服務(wù)接入方式。圖3a為本發(fā)明可實現(xiàn)的一種新服務(wù)接入方式的示意圖。由于某些服務(wù)不適合作為Web服務(wù)提供(如基于TCP或UDP的數(shù)據(jù)服務(wù)、視頻、傳文件等客戶端才能實現(xiàn)的服務(wù)能力),但若作為客戶端組件,使用客戶端開發(fā)方式來使用,技術(shù)門檻比較高,使用也不方便。因此本發(fā)明把客戶端的本地組件作為本地服務(wù)組件,該本地服務(wù)組件用于為WebApp提供特定的本地服務(wù)功能(如TCP或UDP數(shù)據(jù)傳輸服務(wù)、視頻傳輸服務(wù)等服務(wù)功能),把這種本地服務(wù)組件封裝成自定義對象即圖3a中所示的服務(wù)代理對象,腳本引擎中映射有該服務(wù)代理對象的腳本對象,該腳本對象又嵌入到瀏覽器內(nèi)核中。在瀏覽器內(nèi)核需要特定的客戶端服務(wù)時,只需要調(diào)用該腳本對象(相當于調(diào)用WebApp本地服務(wù)的ー個接ロ),通過服務(wù)代理對象通知所述本地服務(wù)組件實現(xiàn)特定的客戶端服務(wù)功能。對于WebApp開發(fā)者來說,當需要使用復(fù)雜的本地服務(wù)時,不必重新開發(fā)本地組件,而只需要調(diào)用所述服務(wù)代理對象的腳本對象即可,本地服務(wù)的具體實現(xiàn)都通過所述已經(jīng)封裝好的本地服務(wù)組件來實現(xiàn),因此大大筒化了 WebApp開發(fā)者的開發(fā)工作,降低了開發(fā)門檻,有助于WebApp框架的推廣。例如對于傳輸文件的服務(wù),利用HTTP協(xié)議的文件傳輸效率是很低的,使用客戶端的多線程和多點下載技術(shù),可以極大的提高傳輸文件的速度,但是在Web頁面里這種客戶端多線程和多點下載技術(shù)是不可能實現(xiàn)的。通過本發(fā)明的方案,可以在頁面腳本里面直接調(diào)用傳文件的服務(wù),實現(xiàn)高速文件傳輸。通過這種機制,Web頁面可以利用客戶端的服務(wù)來 完成復(fù)雜的功能,極大的擴展了 WebApp的應(yīng)用范圍。在圖3a中,所述本地服務(wù)組件設(shè)置到了與服務(wù)代理對象、腳本引擎、以及瀏覽器內(nèi)核的同一個瀏覽器進程中。當然,為了節(jié)省資源和便于管理,在在另一中優(yōu)選方案中,也可以將本地服務(wù)組件單獨設(shè)置進ー個獨立的服務(wù)進程中,如圖3b所示,在瀏覽器內(nèi)核需要特定的客戶端服務(wù)時,通過所述服務(wù)代理對象向所述服務(wù)進程發(fā)出指令,服務(wù)進程再調(diào)用對應(yīng)的本地服務(wù)組件實施特定的客戶端服務(wù)。圖4a為本發(fā)明所述瀏覽器內(nèi)核獨享瀏覽器進程的示意圖。由于瀏覽器內(nèi)核可能會發(fā)生崩潰,如果很多WebApp使用的瀏覽器內(nèi)核都在同一個進程,一個頁面的崩潰就會導(dǎo)致進程的崩潰,從而導(dǎo)致所有WebApp的崩潰。所以本發(fā)明把不同WebApp對應(yīng)的瀏覽器內(nèi)核放在不同的進程里,如果ー個瀏覽器內(nèi)核崩潰就僅會影響到當前的WebApp,從而增強了WebApp框架的穩(wěn)定性。但是,如果每ー個WebApp對應(yīng)的瀏覽器內(nèi)核都放在不同的瀏覽器進程里,則會導(dǎo)致資源的過度消耗。當打開很多個WebApp的時候,會打開多個瀏覽器進程,會導(dǎo)致資源占用過多,系統(tǒng)性能降低。所以這里不能簡單的處理,需要使用ー個策略來保持穩(wěn)定性和性能的平衡,對于不同的機器,不同的系統(tǒng),不同的配置,可以同時打開的瀏覽器進程數(shù)是不一樣的。因此本發(fā)明進ー步設(shè)置可同時打開的最大瀏覽器進程數(shù);當同時運行的WebApp數(shù)小于或等于所述最大瀏覽器進程數(shù)吋,則每個WebApp對應(yīng)的瀏覽器內(nèi)核分別運行在不同的瀏覽器進程中;否則至少兩個WebApp對應(yīng)的瀏覽器內(nèi)核共享ー個瀏覽器進程,如圖4b所
/Jn o圖5為本發(fā)明所述WebApp框架的跨進程渲染機制的ー種示意圖。參見圖5,本發(fā)明所述的WebApp框架在本地客戶端中包括相互獨立的框架進程和瀏覽器進程;所述框架進程(也可稱為界面框架進程,用于WebApp的界面信息展示)中包括容器窗ロ(由于是在客戶端展現(xiàn),所以也可稱為客戶端容器窗ロ)和瀏覽器代理對象,所述瀏覽器進程中包括瀏覽器內(nèi)核和所述瀏覽器代理對象對應(yīng)的存根對象。本發(fā)明中,所述框架進程需要調(diào)用瀏覽器內(nèi)核對象,瀏覽器內(nèi)核對象在另ー個進程即瀏覽器進程中,所以在框架進程里面,有一個瀏覽器內(nèi)核對象的代理對象即瀏覽器代理對象,接管框架進程的調(diào)用,該瀏覽器代理對象收到框架進程調(diào)用瀏覽器內(nèi)核對象的請求以后,把這些調(diào)用請求轉(zhuǎn)換為數(shù)據(jù)描述,通過跨進程通信傳遞給瀏覽器進程,而瀏覽器進程必須有對象來接收這些信息,這就是存根對象,存根對象收到所述調(diào)用請求信息以后,轉(zhuǎn)換為對瀏覽器內(nèi)核對象的調(diào)用。通過上述過程,可以完成跨進程的對象調(diào)用過程。本發(fā)明中,ー個WebApp窗ロ容器里并沒有使用傳統(tǒng)的瀏覽器控件的窗ロ,但是在所述容器窗口內(nèi)指定了 ー個區(qū)域,如圖5中的頁面代理窗ロ,該頁面代理窗ロ的繪制由瀏覽器提供的界面圖像來繪制。所述瀏覽器進程的存根對象和框架進程的瀏覽器代理對象之間會有ー個通信通道,可以進行數(shù)據(jù)的傳輸,框架進程的瀏覽器代理對象會向瀏覽器進程中的存根對象告知所述頁面代理窗ロ的相關(guān)信息(例如該頁面代理窗ロ的大小或者操作指令),瀏覽器進程的存根對象會將這些信息發(fā)送給瀏覽器內(nèi)核。所述瀏覽器內(nèi)核用于渲染W(wǎng)ebApp的界面信息,即決定瀏覽器如何顯示網(wǎng)頁的內(nèi)容以及頁面的格式信息。當瀏覽器內(nèi)核收到來自存根對象的信息后,渲染出與所述頁面代理窗ロ同樣大小的一幅頁面圖像,這幅頁面圖像再通過存根對象跨進程傳輸?shù)娇蚣苓M程的瀏覽器代理對象,該瀏覽器代理對象再將所述頁面圖像展示在所述頁面代理窗ロ。由于本地的數(shù)據(jù)通信效率很高,所以即使動態(tài)的頁面都可以實現(xiàn)實時的圖像更新,用戶看WebApp窗ロ里面好像有ー個真正的網(wǎng)頁,但 其實只是圖像而己。圖6為本發(fā)明所述跨進程渲染網(wǎng)頁圖像的ー種示意圖。如圖6所示,所述瀏覽器內(nèi)核渲染的WebApp的界面信息是頁面圖像,當然還可以進ー步包括音頻視頻等數(shù)據(jù)信息,如果WebApp的網(wǎng)頁是動態(tài)更新的,則該瀏覽器內(nèi)核可以實時動態(tài)渲染出該動態(tài)網(wǎng)頁的界面信息(如界面圖像),并發(fā)送給框架進程的瀏覽器代理對象動態(tài)更新所述頁面代理窗ロ內(nèi)的界面信息,使得用戶看到WebApp的容器窗口內(nèi)好像是ー個動態(tài)網(wǎng)頁。當然用戶還需要對網(wǎng)頁進行操作,比如用戶在所述指定區(qū)域(如圖5的頁面代理窗ロ)內(nèi)進行點擊操作和輸入文字等操作,所述框架進程實時捕捉所述容器窗ロ指定區(qū)域內(nèi)的操作指令,在捕捉到操作指令后通過本框架進程的瀏覽器代理對象跨進程發(fā)送該操作指令到所述瀏覽器進程的存根對象,由該存根對象轉(zhuǎn)發(fā)給對應(yīng)的瀏覽器內(nèi)核,瀏覽器內(nèi)核根據(jù)操作指令重新渲染W(wǎng)ebApp的界面圖像,通過本瀏覽器進程的存根對象將該界面圖像跨進程發(fā)送給所述框架進程的瀏覽器代理對象;該瀏覽器代理對象將收到的界面信息更新到所述頁面代理窗口中。通過這種頁面的刷新方式,使用戶看起來像是在操作真正的網(wǎng)頁。通過跨進程渲染,瀏覽器內(nèi)核與WebApp框架就完全隔離了,不管頁面是卡住還是崩潰都不會影響到框架本身,而且由于瀏覽器內(nèi)核在另ー個進程,所以框架進程的內(nèi)存,性能完全不受影響。給用戶非常好的體驗。圖5所示瀏覽器進程中包括本地組件,當然在另ー實施方式中可以將本地組件設(shè)置在與瀏覽器進程相獨立的進程中,如圖2b所示。圖7為本發(fā)明具有跨進程渲染機制的一種服務(wù)接入方式示意圖。參見圖7,把客戶端的本地組件作為本地服務(wù)組件,把這種本地服務(wù)組件封裝成自定義對象即圖7中所示的服務(wù)代理對象,腳本引擎中映射有該服務(wù)代理對象的腳本對象,該腳本對象又嵌入到瀏覽器內(nèi)核中。在瀏覽器內(nèi)核需要特定的客戶端服務(wù)時,調(diào)用該腳本對象,通過服務(wù)代理對象通知服務(wù)進程中的所述本地服務(wù)組件實現(xiàn)特定的客戶端服務(wù)功能。圖7實施例中將本地服務(wù)組件設(shè)置在了獨立的服務(wù)進程中,當然所述本地服務(wù)組件也可以設(shè)置到與服務(wù)代理対象、腳本引擎、以及瀏覽器內(nèi)核的同一個瀏覽器進程中,如圖3a所示。對于WebApp的安全性,本發(fā)明也采取了相應(yīng)的技術(shù)方案。對于WebApp界面框架進程、瀏覽器進程、還有服務(wù)進程,最不安全的是瀏覽器進程。因此本發(fā)明使用沙箱的技術(shù)對瀏覽器進程進行防護,防止不安全的頁面對系統(tǒng)的破壞。圖8為本發(fā)明對瀏覽器進程進行沙箱保護的示意圖,如圖8所示,所述瀏覽器進程中進ー步包括沙箱保護單元,用于對瀏覽器進程進行防護。至于沙箱保護單元具體的實施方法,可以參考現(xiàn)有技術(shù),本文不再贅述。另外ー個安全性問題是數(shù)據(jù)的安全性,WebApp可能會需要賬號或者用戶信息等機密數(shù)據(jù),但不可能要求所有的WebApp都使用HTTPS這樣的加密通道,這里可以在服務(wù)進程這邊實現(xiàn)加密,服務(wù)進程與后臺服務(wù)器可以使用加密的協(xié)議,服務(wù)進程與瀏覽器進程的服務(wù)代理可以使用加密傳輸?shù)姆绞?,然后在瀏覽器進程的服務(wù)代理這里解密,然后傳給頁面使用?;谏鲜鰧Ρ景l(fā)明所述WebApp運行裝置的描述,本發(fā)明還公開了 WebApp的運行·方法,圖9為本發(fā)明WebApp運行方法的一種流程圖,該流程包括封裝本地組件,形成具有特定客戶端功能的自定義對象;在腳本引擎中設(shè)置所述自定義對象的腳本對象;在瀏覽器內(nèi)核嵌入所述腳本對象;當WebApp運行吋,瀏覽器內(nèi)核通過運行腳本調(diào)用所嵌入的腳本對象,運行所述自定義對象的特定的客戶端功能。依據(jù)前述描述,該方法在WebApp運行時,在同一瀏覽器進程中運行所述自定義對象、腳本引擎、瀏覽器內(nèi)核,在與該瀏覽器進程相獨立的進程中運行所述本地組件;或者在同一瀏覽器進程中運行所述本地組件、自定義對象、腳本引擎、以及瀏覽器內(nèi)核。依據(jù)前述描述,為了節(jié)約資源和方便管理,該方法進ー步設(shè)置可同時打開的最大瀏覽器進程數(shù);當同時運行的WebApp數(shù)小于或等于所述最大瀏覽器進程數(shù)吋,則每個WebApp對應(yīng)的瀏覽器內(nèi)核分別運行在不同的瀏覽器進程中;否則至少兩個WebApp對應(yīng)的瀏覽器內(nèi)核共享ー個瀏覽器進程。依據(jù)前述描述的跨進程渲染機制,該方法進ー步啟動與所述瀏覽器進程相互獨立的框架進程,所述框架進程中運行容器窗口和瀏覽器代理對象,所述瀏覽器進程中進ー步運行所述瀏覽器代理對象對應(yīng)的存根對象;所述框架進程的瀏覽器代理對象將所述容器窗ロ內(nèi)指定區(qū)域的相關(guān)信息發(fā)送給瀏覽器進程的存根對象,并由該存根對象轉(zhuǎn)發(fā)給對應(yīng)的瀏覽器內(nèi)核;所述瀏覽器內(nèi)核根據(jù)收到的信息渲染W(wǎng)ebApp的界面信息,并通過本瀏覽器進程的存根對象將該界面信息跨進程發(fā)送給所述框架進程的瀏覽器代理對象;該框架進程的瀏覽器代理對象將收到的界面信息展示在所述容器窗ロ的指定區(qū)域。依據(jù)前述描述,所述本地組件可以為本地服務(wù)組件,所述自定義對象為服務(wù)代理對象,從而提供了一種新的服務(wù)接入方式。以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進等,均應(yīng)包含在本發(fā)明保護的范圍之內(nèi)。
權(quán)利要求
1.ー種網(wǎng)絡(luò)應(yīng)用的運行裝置,包括網(wǎng)絡(luò)應(yīng)用對應(yīng)的瀏覽器內(nèi)核和腳本引擎,其特征在于,該裝置還包括本地組件和自定義對象,其中 所述本地組件用于提供基礎(chǔ)的客戶端功能; 所述自定義對象用于封裝本地組件,形成特定的客戶端功能; 所述腳本引擎中設(shè)置有所述自定義對象對應(yīng)的腳本對象; 所述瀏覽器內(nèi)核嵌入了所述腳本對象,并通過運行腳本調(diào)用所嵌入的腳本對象,運行所述自定義對象的特定的客戶端功能。
2.根據(jù)權(quán)利要求I所述的裝置,其特征在于,該裝置包括瀏覽器進程;所述自定義對象、腳本引擎、以及瀏覽器內(nèi)核運行在同一瀏覽器進程中,所述本地組件也運行在該瀏覽器進程中,或者所述本地組件運行在與該瀏覽器進程相獨立的進程中。
3.根據(jù)權(quán)利要求2所述的裝置,其特征在于,在同時運行ー個以上網(wǎng)絡(luò)應(yīng)用時,所有網(wǎng)絡(luò)應(yīng)用對應(yīng)的瀏覽器內(nèi)核分別運行在不同的瀏覽器進程中,或者其中至少兩個網(wǎng)絡(luò)應(yīng)用對應(yīng)的瀏覽器內(nèi)核共享ー個瀏覽器進程。
4.根據(jù)權(quán)利要求2所述的裝置,其特征在干,所述瀏覽器進程中進ー步包括沙箱保護単元,用于對瀏覽器進程進行防護。
5.根據(jù)權(quán)利要求2所述的裝置,其特征在于,該裝置進ー步包括框架進程,該框架進程中包括容器窗口和瀏覽器代理對象,所述瀏覽器進程中進ー步包括存根對象;所述框架進程的瀏覽器代理對象用于將所述容器窗口內(nèi)指定區(qū)域的相關(guān)信息發(fā)送給瀏覽器進程的存根對象,并由該存根對象轉(zhuǎn)發(fā)給對應(yīng)的瀏覽器內(nèi)核,所述瀏覽器內(nèi)核根據(jù)收到的信息渲染網(wǎng)絡(luò)應(yīng)用的界面信息,并通過本瀏覽器進程的存根對象將該界面信息跨進程發(fā)送給所述框架進程的瀏覽器代理對象;該瀏覽器代理對象將收到的界面信息展示在所述容器窗ロ的指定區(qū)域。
6.根據(jù)權(quán)利要求I至5任一項所述的裝置,其特征在于,所述本地組件為本地服務(wù)組件,所述自定義對象為服務(wù)代理対象。
7.—種網(wǎng)絡(luò)應(yīng)用的運行方法,其特征在于,包括 封裝本地組件,形成具有特定客戶端功能的自定義對象; 在腳本引擎中設(shè)置所述自定義對象的腳本對象; 在瀏覽器內(nèi)核嵌入所述腳本對象; 當網(wǎng)絡(luò)應(yīng)用運行時,瀏覽器內(nèi)核通過運行腳本調(diào)用所嵌入的腳本對象,運行所述自定義對象的特定的客戶端功能。
8.根據(jù)權(quán)利要求7所述的方法,其特征在于,在網(wǎng)絡(luò)應(yīng)用運行時,在同一瀏覽器進程中運行所述自定義對象、腳本引擎、瀏覽器內(nèi)核,在與該瀏覽器進程相獨立的進程中運行所述本地組件;或者在同一瀏覽器進程中運行所述本地組件、自定義對象、腳本引擎、以及瀏覽器內(nèi)核。
9.根據(jù)權(quán)利要求8所述的方法,其特征在于,該方法進ー步設(shè)置可同時打開的最大瀏覽器進程數(shù);當同時運行的網(wǎng)絡(luò)應(yīng)用數(shù)小于或等于所述最大瀏覽器進程數(shù)時,則每個網(wǎng)絡(luò)應(yīng)用對應(yīng)的瀏覽器內(nèi)核分別運行在不同的瀏覽器進程中;否則至少兩個網(wǎng)絡(luò)應(yīng)用對應(yīng)的瀏覽器內(nèi)核共享ー個瀏覽器進程。
10.根據(jù)權(quán)利要求8所述的方法,其特征在于,該方法進ー步啟動與所述瀏覽器進程相互獨立的框架進程,所述框架進程中運行容器窗口和瀏覽器代理對象,所述瀏覽器進程中進ー步運行存根對象; 所述框架進程的瀏覽器代理對象將所述容器窗口內(nèi)指定區(qū)域的相關(guān)信息發(fā)送給瀏覽器進程的存根對象,并由該存根對象轉(zhuǎn)發(fā)給對應(yīng)的瀏覽器內(nèi)核; 所述瀏覽器內(nèi)核根據(jù)收到的信息渲染網(wǎng)絡(luò)應(yīng)用的界面信息,并通過本瀏覽器進程的存根對象將該界面信息跨進程發(fā)送給所述框架進程的瀏覽器代理對象;該瀏覽器代理對象將收到的界面信息展示在所述容器窗ロ的指定區(qū)域。
11.根據(jù)權(quán)利要求7至10任一項所述的方法,其特征在于,所述本地組件為本地服務(wù)組件,所述自定義對象為服務(wù)代理対象。
全文摘要
本發(fā)明公開了一種網(wǎng)絡(luò)應(yīng)用的運行裝置和方法,該裝置包括本地組件、自定義對象、腳本引擎、以及瀏覽器內(nèi)核。所述方法包括封裝本地組件,形成具有特定客戶端功能的自定義對象;在腳本引擎中設(shè)置所述自定義對象的腳本對象;在瀏覽器內(nèi)核嵌入所述腳本對象;當網(wǎng)絡(luò)應(yīng)用運行時,瀏覽器內(nèi)核通過運行腳本調(diào)用所嵌入的腳本對象,運行所述自定義對象的特定的客戶端功能。利用本發(fā)明,可以擴展網(wǎng)絡(luò)應(yīng)用框架的能力,同時又降低網(wǎng)絡(luò)應(yīng)用的技術(shù)開發(fā)門檻,提高安全性。
文檔編號H04L29/08GK102843393SQ20111016923
公開日2012年12月26日 申請日期2011年6月22日 優(yōu)先權(quán)日2011年6月22日
發(fā)明者黃奎, 魏亞民, 謝昕虬, 劉紅杰 申請人:騰訊科技(深圳)有限公司