两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

支持異步調(diào)用的JavaScript事件擴(kuò)展方法

文檔序號(hào):9865198閱讀:341來(lái)源:國(guó)知局
支持異步調(diào)用的JavaScript事件擴(kuò)展方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及嵌入式領(lǐng)域,特別涉及一種支持異步調(diào)用的JavaScript事件擴(kuò)展方法。
【背景技術(shù)】
[0002]在嵌入式設(shè)備上,用戶(hù)不僅可以通過(guò)瀏覽器來(lái)獲取互聯(lián)網(wǎng)上的信息,同時(shí)還可以通過(guò)瀏覽器操控設(shè)備與本地功能組件交互。以瀏覽器為載體的Web應(yīng)用正逐漸興起,Web應(yīng)用具有開(kāi)發(fā)門(mén)檻低,容易移植等優(yōu)點(diǎn)。在構(gòu)建Web應(yīng)用的時(shí)候,一個(gè)重要的問(wèn)題是需要將本地組件的接口擴(kuò)展為JavaScript接口,供Web應(yīng)用調(diào)用。將本地組件接口擴(kuò)展為JavaScript,具有廣泛的需求。本地組件和JavaScript之間的同步調(diào)用比較容易實(shí)現(xiàn),但是由于異步調(diào)用時(shí)需要跨線程之間做消息傳遞,以及異步處理后需要將結(jié)果以回調(diào)的方式返回等特點(diǎn),本地組件與JavaScript之間做異步調(diào)用比較困難。

【發(fā)明內(nèi)容】

[0003]本發(fā)明的目的在于克服現(xiàn)有技術(shù)中本地組件與JavaScript之間的異步調(diào)用較為困難的缺陷,從而提供一種能夠較好地實(shí)現(xiàn)本地組件和JavaScript異步調(diào)用的方法。
[0004]為了實(shí)現(xiàn)上述目的,本發(fā)明提供了一種支持異步調(diào)用的JavaScript事件擴(kuò)展方法,該方法基于WebKit實(shí)現(xiàn),包括:
[0005]步驟I)、在WebCore內(nèi)按照DOM事件的命名方式擴(kuò)展JavaScript事件的名稱(chēng);
[0006]步驟2)、按照WebCore中JavaScript對(duì)象的創(chuàng)建方式創(chuàng)建JavaScript事件對(duì)象;
[0007]步驟3)、將步驟2)中所創(chuàng)建的JavaScript事件對(duì)象擴(kuò)展為EventTarget ;
[0008]步驟4)、將WebCore中的事件封裝為V8中的事件對(duì)象;
[0009]步驟5)、編譯并部署動(dòng)態(tài)庫(kù)。
[0010]上述技術(shù)方案中,所述步驟2)包括:
[0011]擴(kuò)展WebCore中JavaScript對(duì)象的事件,得到JavaScript事件對(duì)象;
[0012]聲明所述JavaScript事件對(duì)象繼承Event對(duì)象,并定義所述JavaScript事件對(duì)象的屬性;
[0013]在WebCore中,將與所述JavaScript事件對(duì)象所對(duì)應(yīng)的C++類(lèi)繼承WebCore中的Event類(lèi),實(shí)現(xiàn)屬性的getter方法。
[0014]上述技術(shù)方案中,所述步驟3)包括:
[0015]令JavaScript 對(duì)象繼承 EventTarget ;
[0016]將JavaScript事件聲明為所述JavaScript對(duì)象的一個(gè)屬性;
[0017]在WebCore中,令與所述JavaScript對(duì)象所對(duì)應(yīng)的C++類(lèi)繼承EventTarget,并在該類(lèi)中定義JavaScript事件監(jiān)聽(tīng)函數(shù)的setter和getter方法;
[0018]在所述JavaScript對(duì)象中實(shí)現(xiàn)一個(gè)創(chuàng)建并發(fā)起JavaScript事件的函數(shù)。
[0019]上述技術(shù)方案中,所述的步驟4)包括:
[0020]在JavaScript對(duì)象所對(duì)應(yīng)的C++類(lèi)的基類(lèi)EventTarget中加入getter方法,該方法為虛函數(shù),同時(shí)在該JavaScript對(duì)象所對(duì)應(yīng)的C++類(lèi)中重寫(xiě)該方法,返回this指針;
[0021]在WebCore中的Event類(lèi)中加入判斷事件類(lèi)型的方法,該方法同樣是虛函數(shù),在Event的派生類(lèi),即JavaScript事件對(duì)象所對(duì)應(yīng)的C++類(lèi)中重寫(xiě)該方法;
[0022]將WebCore中的Event類(lèi)封裝為V8Event,加入事件的類(lèi)型判斷并將WebCore中的Event類(lèi)封裝為V8的數(shù)據(jù)格式。
[0023]本發(fā)明的優(yōu)點(diǎn)在于:
[0024]1、本發(fā)明可有效地解決本地組件和JavaScript之間的異步調(diào)用問(wèn)題。所擴(kuò)展的JavaScript對(duì)象和本地組件之間不僅可以同步調(diào)用,還可以異步調(diào)用,拓寬了本地組件和擴(kuò)展JavaScript對(duì)象之間的調(diào)用方式。
[0025]2、本發(fā)明提出的異步調(diào)用方法,是在瀏覽器內(nèi)部通過(guò)native方式實(shí)現(xiàn),在嵌入式設(shè)備計(jì)算資源有限的環(huán)境下,能夠節(jié)省計(jì)算資源,特別適合在本地組件和JavaScript對(duì)象之間有頻繁異步調(diào)用的情景。
【附圖說(shuō)明】
[0026]圖1是本發(fā)明的支持異步調(diào)用的JavaScript事件擴(kuò)展方法的應(yīng)用場(chǎng)景示意圖;
[0027]圖2是本發(fā)明的支持異步調(diào)用的JavaScript事件擴(kuò)展方法的流程圖;
[0028]圖3是本發(fā)明的支持異步調(diào)用的JavaScript事件擴(kuò)展方法中WebCore的DOM事件模型靜態(tài)結(jié)構(gòu)圖;
[0029]圖4是本發(fā)明的支持異步調(diào)用的JavaScript事件擴(kuò)展方法中OTTVideo事件的函數(shù)調(diào)用序列圖。
【具體實(shí)施方式】
[0030]現(xiàn)結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步的描述。
[0031]本發(fā)明的方法是基于WebKit實(shí)現(xiàn)的,為了便于理解,在對(duì)本發(fā)明的方法做詳細(xì)說(shuō)明之前,首先對(duì)WebKit做簡(jiǎn)要的描述。
[0032]WebKit是一個(gè)開(kāi)源網(wǎng)頁(yè)排版引擎,WebKit內(nèi)核中主要包含兩大部分=WebCore和JavaScript 引擎。
[0033]WebCore是HTML文檔排版引擎,負(fù)責(zé)解析、布局、渲染HTML文檔。其中包含DOM(Document Object Module,文檔對(duì)象模型)的實(shí)現(xiàn),同時(shí)WebCore也有綁定(binding)模塊,它可以和JavaScript引擎綁定。這樣JavaScript引擎可以操控DOM模塊,控制網(wǎng)頁(yè)的行為。
[0034]JavaScript引擎是JavaScript語(yǔ)言的一個(gè)解釋器,提供了 JavaScript的運(yùn)行環(huán)境,可以解析并執(zhí)行JavaScript腳本。同時(shí),JavaScript引擎與WebCore中的bindings模塊相聯(lián)系,使得JavaScript腳本可以操作DOM元素。
[0035]下面結(jié)合實(shí)例對(duì)本發(fā)明的方法做進(jìn)一步說(shuō)明。
[0036]圖1為本發(fā)明方法的應(yīng)用場(chǎng)景的示意圖,如圖所示,一瀏覽器中包含有本地組件,而在Web頁(yè)面中運(yùn)行JavaScript腳本。為了實(shí)現(xiàn)本地組件與JavaScript腳本間的同步調(diào)用與異步調(diào)用(特別是異步調(diào)用),將本地組件的接口擴(kuò)展為JavaScript接口。所述的JavaScript接口基于WebKit實(shí)現(xiàn),即在該接口中至少包括有WebCore和JavaScript引擎。
[0037]在下面的實(shí)例中將以流媒體視頻的播放為例,對(duì)本發(fā)明的方法如何將本地組件的接口擴(kuò)展為JavaScript接口做進(jìn)一步的說(shuō)明。
[0038]在流媒體視頻播放的過(guò)程中,用戶(hù)在Web頁(yè)面上點(diǎn)擊一個(gè)流媒體視頻,由Web頁(yè)面中的JavaScript腳本調(diào)用本地組件,本地組件則通過(guò)異步方式獲取視頻的URL地址,當(dāng)本地組件準(zhǔn)備好URL地址后,以DOM事件的方式通知Web頁(yè)面。具體的說(shuō),在本實(shí)施例中,將本地組件的JavaScript接口的WebCore中與流媒體視頻播放有關(guān)的對(duì)象記為OTTVideo對(duì)象;將Web頁(yè)面的JavaScript腳本中與流媒體視頻播放有關(guān)的對(duì)象記為ottvideo對(duì)象;將OTTVideo對(duì)象向ottvideo對(duì)象所發(fā)送的DOM事件記為onPlay。則前述的流媒體視頻播放過(guò)程即為=OTTVideo對(duì)象通過(guò)異步方式向本地組件請(qǐng)求流媒體視頻的播放鏈接,本地組件準(zhǔn)備好播放鏈接后,回調(diào)WebCore中的OTTVideo對(duì)象,參數(shù)為含有播放鏈接URL的字符串;接著,WebCore中的OTTVideo對(duì)象需要將該播放鏈接以DOM事件的形式(即事件onPlay)發(fā)送給JavaScript端的ottvideo對(duì)象,參數(shù)為命名src,參數(shù)類(lèi)型是一個(gè)字符串。
[0039]參考圖2,本發(fā)明的方法包括:
[0040]步驟1、擴(kuò)展以onPlay命名的事件
[0041]按照WebCore中DOM事件的命名方式,擴(kuò)展自定義JavaScript事件的名稱(chēng),方便包含有JavaScript腳本的Web頁(yè)面中使用該事件;具體的說(shuō),擴(kuò)展以onPlay命名的事件的方式如下:在 WebCore/dom/EventNames.h 文件的 #defineDOM_EVENT_NAMES_FOR_EACH (macro)宏中加入macro (Play) \聲明onPlay這個(gè)事件。
[0042]步驟2、擴(kuò)展ottvideoevent對(duì)象實(shí)例
[0043]按照WebCore中JavaScript對(duì)象的創(chuàng)建方式,創(chuàng)建JavaScript事件對(duì)象實(shí)例。創(chuàng)建JavaScript事件對(duì)象實(shí)例包括:擴(kuò)展WebCore中OTTVideo對(duì)象的特有事件,所得到的JavaScript事件對(duì)象命名為ottvideoevent,在WebCore中與該JavaScript事件對(duì)象對(duì)應(yīng)的C++類(lèi)命名為OTTVideoEvent ;在擴(kuò)展時(shí),還需要在OTTVideoEvent.1dl中聲明JavaScript 對(duì)象 ottvideoevent 繼承 Event 對(duì)象,并
當(dāng)前第1頁(yè)1 2 
網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
涿州市| 剑阁县| 巴塘县| 宣城市| 武宣县| 罗定市| 江城| 东方市| 县级市| 杭锦后旗| 芜湖县| 兴安县| 阿勒泰市| 乌兰察布市| 景洪市| 山阳县| 紫云| 安宁市| 安多县| 彭阳县| 元朗区| 迁安市| 巨鹿县| 南岸区| 长宁区| 介休市| 临城县| 民乐县| 田阳县| 孝义市| 建宁县| 垦利县| 恩平市| 西昌市| 岳普湖县| 忻州市| 清河县| 邢台县| 滨海县| 会同县| 绥阳县|