欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

Javascript中調(diào)用二進(jìn)制組件的方法

文檔序號(hào):6508497閱讀:211來(lái)源:國(guó)知局
Javascript中調(diào)用二進(jìn)制組件的方法
【專利摘要】本發(fā)明提供一種Javascript中調(diào)用二進(jìn)制組件的方法,該方法包括:Javascript引擎獲取Javascript語(yǔ)句中的字符串并判定是否為Javascript語(yǔ)言節(jié)點(diǎn);若不是Javascript語(yǔ)言節(jié)點(diǎn),則Javascript引擎的異常攔截器攔截并獲取該字符串;從二進(jìn)制組件的加載路徑中查詢是否存在該字符串對(duì)應(yīng)的二進(jìn)制組件;創(chuàng)建該字符串對(duì)應(yīng)的二進(jìn)制組件對(duì)象并封裝為Javascript對(duì)象。該方法實(shí)現(xiàn)在Javascript腳本解析執(zhí)行過(guò)程中根據(jù)需要靈活加載二進(jìn)制組件。
【專利說(shuō)明】Javascript中調(diào)用二進(jìn)制組件的方法

【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及Javascript中調(diào)用自定義組件的技術(shù),尤其涉及一種Javascript中 調(diào)用二進(jìn)制組件的方法。

【背景技術(shù)】
[0002] 目前,使用瀏覽器作為本地應(yīng)用的平臺(tái)已經(jīng)有了廣泛的實(shí)際應(yīng)用,HTML/CSS處理 頁(yè)面顯示和美化,Javascript腳本處理頁(yè)面邏輯。但是,Javascript作為腳本語(yǔ)言存在一 定的先天局限性,出于安全性方面的考量,Javascript腳本不具備訪問(wèn)本地資源的能力,對(duì) 于網(wǎng)絡(luò)訪問(wèn)也受到同源策略(SameOriginPolicy)的嚴(yán)格限制,所以,基于瀏覽器的應(yīng)用 在獲取外部資源和外部程序的支持時(shí),需要對(duì)瀏覽器進(jìn)行額外的擴(kuò)展,目前多數(shù)瀏覽器通 過(guò)本地插件式擴(kuò)展機(jī)制以擴(kuò)展Javascript腳本的功能。
[0003] 實(shí)現(xiàn)Javascript腳本調(diào)用組件的可行策略是,在Javascript引擎初始化時(shí),增加 一個(gè)組件的注冊(cè)表,將組件的所有信息全部注冊(cè)到Javascript運(yùn)行環(huán)境的全局變量中。但 是,將組件所有信息在Javascript初始化時(shí)全部注冊(cè)的話,導(dǎo)致Javascript引擎初始化過(guò) 程耗時(shí)且內(nèi)存占用量過(guò)大。


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

[0004] 鑒于上述內(nèi)容,有必要提出一種Javascript中調(diào)用二進(jìn)制組件的方法,該方法可 以實(shí)現(xiàn)在Javascript腳本運(yùn)行時(shí)靈活調(diào)用二進(jìn)制組件以擴(kuò)展Javascript腳本的功能。
[0005] 所述Javascript中調(diào)用二進(jìn)制組件的方法,包括步驟:Javascript引擎獲取 Javascript語(yǔ)句中的字符串并判定是否為Javascript語(yǔ)言節(jié)點(diǎn);若不是Javascript語(yǔ) 言節(jié)點(diǎn),Javascript引擎的異常攔截器攔截并獲取該字符串;從二進(jìn)制組件的加載路徑中 查詢是否存在該字符串對(duì)應(yīng)的二進(jìn)制組件;創(chuàng)建該字符串對(duì)應(yīng)的二進(jìn)制組件對(duì)象并封裝為 Javascript對(duì)象。
[0006] 相比于現(xiàn)有技術(shù),本發(fā)明所述Javascript中調(diào)用二進(jìn)制組件的方法,通過(guò)修改 Javascript引擎的異常處理機(jī)制的方式,使得在Javascript腳本運(yùn)行時(shí)活加載二進(jìn)制組 件。另外,當(dāng)調(diào)用的二進(jìn)制組件為支持同步和異步回調(diào)的CAR組件,在Javascript腳本中 調(diào)用該CAR組件對(duì)象的方法而觸發(fā)回調(diào)事件時(shí),能夠同步或是異步回調(diào)該回調(diào)事件的回調(diào) 函數(shù)。

【專利附圖】

【附圖說(shuō)明】
[0007] 圖1是通過(guò)修改Javascript引擎的異常處理機(jī)制實(shí)現(xiàn)Javascript中調(diào)用CAR組 件的方法流程圖。
[0008] 圖2是一個(gè)CAR組件示例FooBar組件的的程序代碼。
[0009] 圖3是觸發(fā)回調(diào)事件執(zhí)行異步回調(diào)的不意圖。

【具體實(shí)施方式】
[0010] 本較佳實(shí)施例中以CAR組件作為二進(jìn)制組件的示例進(jìn)行說(shuō)明,本領(lǐng)域的技術(shù)人員 可以將該方法應(yīng)用到其他二進(jìn)制組件中,以實(shí)現(xiàn)在Javascript中調(diào)用二進(jìn)制組件。
[0011] 所述CAR組件(ComponentAssemblyRuntime)是上海科泰世紀(jì)科技有限公司開(kāi) 發(fā)的一種二進(jìn)制組件,該CAR組件技術(shù)是在Elastos平臺(tái)上(Elastos,一種組件化操作系 統(tǒng))面向組件的編程模型,規(guī)定了組件之間相互調(diào)用的標(biāo)準(zhǔn),并且二進(jìn)制組件能夠自我描 述。
[0012]所述CAR組件采用C++編寫(xiě),攜帶有元數(shù)據(jù)(metadata),通過(guò)該元數(shù)據(jù)CAR組件 可以實(shí)現(xiàn)反射機(jī)制。該元數(shù)據(jù)是描述數(shù)據(jù)的數(shù)據(jù),對(duì)數(shù)據(jù)的抽象,主要包括了數(shù)據(jù)的類型信 息,例如CAR組件的模塊信息、接口信息、類信息等數(shù)據(jù),且元數(shù)據(jù)與CAR組件的可執(zhí)行代碼 存儲(chǔ)在一起,是CAR組件的二進(jìn)制描述。
[0013] 所述CAR組件的反射機(jī)制,提供統(tǒng)一調(diào)用CAR組件內(nèi)封裝的所有接口的Invoke方 法,形如:Invoke(object_name,method_name,parameters)以實(shí)現(xiàn)對(duì)CAR組件的統(tǒng)一封裝。 例如,在Javascript或是C語(yǔ)言的環(huán)境中調(diào)用某一CAR組件對(duì)象foo的方法Bar(例如: foo.BarO),則在執(zhí)行時(shí)通過(guò)反射機(jī)制調(diào)用Invoke方法(例如:Invoke(foo,Bar,Null), 實(shí)現(xiàn)了對(duì)CAR組件對(duì)象所有方法具體調(diào)用的封裝。
[0014] 以上是對(duì)CAR組件的簡(jiǎn)單描述,關(guān)于CAR組件的詳細(xì)內(nèi)容可參考CAR組件的使用 說(shuō)明手冊(cè)等。
[0015] 參閱圖1所示,是通過(guò)修改Javascript引擎的異常處理機(jī)制實(shí)現(xiàn)Javascript中 調(diào)用CAR組件的方法流程圖。
[0016] 步驟S01,Javascript引擎獲取Javascript語(yǔ)句中的字符串。
[0017]Javascript是一種解釋執(zhí)行的語(yǔ)言,由瀏覽器的Javascript引擎解釋執(zhí)行。在 Javascript中調(diào)用自定義組件時(shí),一般是在Javascript引擎初始化時(shí)預(yù)先注冊(cè)自定義組 件,使得在調(diào)用過(guò)程中能夠?qū)⒆远x組件正確解析執(zhí)行。而本較佳實(shí)施例中,對(duì)Javascript 引擎的異常處理機(jī)制進(jìn)行擴(kuò)展,以實(shí)現(xiàn)在Javascript腳本解析執(zhí)行時(shí)根據(jù)需要靈活加載 CAR組件。
[0018] 步驟S02,判定上述字符串是否為Javascript的標(biāo)準(zhǔn)語(yǔ)言節(jié)點(diǎn),若是則進(jìn)入步驟 S03,否則進(jìn)入步驟S04。
[0019] 例如,Javascript腳本中varfoo=newCFoo(),CFoo()為CAR組件中的一個(gè)類, CFoo()在當(dāng)前Javascript腳本的上下文(Context)中并未定義,Javascript引擎無(wú)法執(zhí) 行newCFoo()以創(chuàng)建foo對(duì)象,此時(shí),Javascript引擎因該CFoo()不是Javascript標(biāo)準(zhǔn) 語(yǔ)言節(jié)點(diǎn),無(wú)法識(shí)別而拋出異常。
[0020] 步驟S03,Javascript引擎解釋并執(zhí)行該Javascript語(yǔ)句。
[0021] 步驟S04,Javascript引擎的異常攔截器進(jìn)行攔截并獲取該異常(非Javascript 的標(biāo)準(zhǔn)語(yǔ)言節(jié)點(diǎn))的字符串。
[0022] 接續(xù)上述舉例,當(dāng)Javascript引擎拋出異常節(jié)點(diǎn)CFoo(),異常攔截器攔截并獲取 異常的字符串或語(yǔ)言節(jié)點(diǎn)。
[0023] 步驟S05,從CAR組件加載路徑中查詢是否存在該字符串對(duì)應(yīng)的CAR組件,若存在, 則進(jìn)入步驟S07,否則進(jìn)入步驟S06。
[0024] 步驟S06,Javascript引擎異常報(bào)錯(cuò)處理。
[0025] 當(dāng)不存在該字符串對(duì)應(yīng)的CAR組件,該節(jié)點(diǎn)既不是Javascript的語(yǔ)言節(jié)點(diǎn),也不 是CAR組件,則Javascript引擎無(wú)法識(shí)別該字符串,無(wú)法解釋執(zhí)行,則進(jìn)行報(bào)錯(cuò)處理。
[0026] 步驟S07,Javascript引擎創(chuàng)建該字符串對(duì)應(yīng)的CAR組件對(duì)象。
[0027]步驟S08,利用Javascript引擎的API(ApplicationProgrammingInterface,應(yīng) 用程序接口)將創(chuàng)建的CAR組件對(duì)象封裝為Javascript對(duì)象返回到Javascript的運(yùn)行環(huán) 境中。
[0028] 以上攔截Javascript引擎異常的方式實(shí)現(xiàn)Javascript中調(diào)用CAR組件,根據(jù) Javascript腳本中調(diào)用組件的情形靈活加載CAR組件。
[0029] 在實(shí)際應(yīng)用中,當(dāng)瀏覽器為Mozilla組織提供的瀏覽器(例如:Firef〇X火狐瀏覽 器)或Javascript引擎為Mozilla組織所提供的SpiderMonkey,還可以通過(guò)以XPC0M組件 形式接入CAR組件,實(shí)現(xiàn)在Javascript腳本中調(diào)用CAR組件。
[0030] 所述Mozilla組織(Mozilla,哥斯拉)是一個(gè)支持和領(lǐng)導(dǎo)開(kāi)源的Mozilla項(xiàng)目而 設(shè)立的非盈利組織。所述SpiderMonkey是Mozilla項(xiàng)目的一部分,是一個(gè)用C語(yǔ)言實(shí)現(xiàn)的 Javascript腳本引擎,該引擎支持在Javascript腳本中調(diào)用XPC0M組件。所述XPC0M(Cross PlatformComponentObjectModel,XPC0M),是Mozilla的跨平臺(tái)組件對(duì)象模型,類似微軟 的COM(ComponentObjectModel,組件對(duì)象模型)。
[0031] 所述以XPC0M組件形式接入CAR組件,通過(guò)以下步驟實(shí)現(xiàn):
[0032] a)在Javascript引擎中注冊(cè)封裝所有CAR組件的一個(gè)XPC0M組件,如注冊(cè)一個(gè)名 為elastos的XPC0M組件;
[0033]b)重寫(xiě)上述的XPC0M組件elastos創(chuàng)建對(duì)象的方法createlnstance方法,例如, varfoo=elastos.createlnstance( "path/class_name:version"),創(chuàng)建elastos封裝 的某一個(gè)CAR組件的一個(gè)類對(duì)象foo,createlnstance的參數(shù)為"CAR組件加載路徑/類 名:版本號(hào)";
[0034]c)修改Javascript引擎中調(diào)用XPC0M組件對(duì)象的方法的Call方法,在調(diào)用組件 對(duì)象的方法時(shí)增加一個(gè)判定,若調(diào)用方法的對(duì)象是elastos創(chuàng)建的對(duì)象時(shí),則使用CAR組 件內(nèi)部自建的Invoke方法調(diào)用該組件對(duì)象的方法;若為其他標(biāo)準(zhǔn)XPC0M組件創(chuàng)建的對(duì)象 時(shí),則使用XPC0M組件的標(biāo)準(zhǔn)Call方法調(diào)用組件對(duì)象的方法。例如,上述CAR組件的類對(duì) 象foo,在Javascript中執(zhí)行foo.doWork(),doWork()為foo的一個(gè)方法,若foo為標(biāo)準(zhǔn) XPC0M組件創(chuàng)建的對(duì)象,則Javascript引擎通過(guò)調(diào)用Call方法來(lái)調(diào)用執(zhí)行doWorkO方法; 若foo為elastos這個(gè)XPC0M組件創(chuàng)建的對(duì)象,則Javascript引擎通過(guò)調(diào)用CAR組件內(nèi)部 的Invoke方法來(lái)調(diào)用執(zhí)行doWorkO方法。
[0035] 需要說(shuō)明,上述XPC0M組件封裝CAR組件的方式實(shí)現(xiàn)Javascript腳本中調(diào)用CAR 組件,具有一定局限性,僅針對(duì)于Mozilla的瀏覽器。
[0036] 需要指出的是,Javascript語(yǔ)法中對(duì)于回調(diào)的支持形式單一,僅支持同步回調(diào)及 定時(shí)延遲回調(diào),并沒(méi)有支持異步回調(diào)?;谏鲜鰞煞N不同方式實(shí)現(xiàn)Javascript腳本中調(diào) 用CAR組件的基礎(chǔ)上(攔截Javascript引擎異?;騒PC0M組件封裝CAR組件),進(jìn)一步在 Javascript腳本中使用CAR組件的回調(diào)機(jī)制,實(shí)現(xiàn)在Javascript中對(duì)回調(diào)函數(shù)的同步和異 步回調(diào)。
[0037] 結(jié)合圖2所示的CAR組件示例FooBar組件的程序代碼,詳細(xì)說(shuō)明Javascript中 調(diào)用CAR組件的同步和異步回調(diào)機(jī)制。
[0038] 1)修改Javascript引擎的異常處理機(jī)制或是注冊(cè)elastos的XPC0M組件, Javascript引擎初始化時(shí)創(chuàng)建CAR組件的回調(diào)執(zhí)行線程。
[0039] 2)在Javascript頁(yè)面中創(chuàng)建CAR組件對(duì)象。
[0040]形如:

【權(quán)利要求】
1. 一種Javascript中調(diào)用二進(jìn)制組件的方法,應(yīng)用于Javascript引擎中,其特征在 于,該方法包括以下步驟以Javascript引擎的異常攔截方式實(shí)現(xiàn)調(diào)用二進(jìn)制組件: 判定步驟:Javascript引擎獲取Javascript語(yǔ)句中的字符串并判定該字符串是否為 Javascript語(yǔ)言節(jié)點(diǎn); 攔截步驟:若該字符串不是Javascript語(yǔ)言節(jié)點(diǎn),Javascript引擎的異常攔截器攔截 并獲取該字符串; 檢索步驟:從二進(jìn)制組件的加載路徑中查詢是否存在該字符串對(duì)應(yīng)的二進(jìn)制組件; 創(chuàng)建步驟:當(dāng)二進(jìn)制組件的加載路徑中存在與該字符串對(duì)應(yīng)的二進(jìn)制組件時(shí),創(chuàng)建該 字符串對(duì)應(yīng)的二進(jìn)制組件對(duì)象并封裝為Javascript對(duì)象。
2. 如權(quán)利要求1所述的Javascript中調(diào)用二進(jìn)制組件的方法,其特征在于,該方法還 包括:當(dāng)判定Javascript語(yǔ)句中的字符串為Javascript語(yǔ)言節(jié)點(diǎn),Javascript引擎解釋 并執(zhí)行該Javascript語(yǔ)句。
3. 如權(quán)利要求1所述的Javascript中調(diào)用二進(jìn)制組件的方法,其特征在于,該方法還 包括:當(dāng)二進(jìn)制組件的加載路徑中未查詢到該字符串對(duì)應(yīng)的二進(jìn)制組件時(shí),Javascript引 擎進(jìn)行異常報(bào)錯(cuò)處理。
4. 如權(quán)利要求1所述的Javascript中調(diào)用二進(jìn)制組件的方法,其特征在于,該方法還 以XPCOM組件封裝二進(jìn)制組件的方式實(shí)現(xiàn)調(diào)用二進(jìn)制組件,包括以下步驟: 注冊(cè)步驟:注冊(cè)一個(gè)封裝所有二進(jìn)制組件的XPCOM組件; 重寫(xiě)步驟:重寫(xiě)該XPCOM組件創(chuàng)建對(duì)象的方法; 判定步驟:當(dāng)Javascript引擎調(diào)用XPCOM組件對(duì)象的方法時(shí),若調(diào)用方法的對(duì)象為上 述XPCOM組件封裝的二進(jìn)制組件創(chuàng)建的對(duì)象,則使用二進(jìn)制組件內(nèi)部自建的方法調(diào)用該對(duì) 象的方法,若調(diào)用方法的對(duì)象為標(biāo)準(zhǔn)XPCOM組件創(chuàng)建的對(duì)象,則調(diào)用XPCOM的標(biāo)準(zhǔn)Call方 法調(diào)用該對(duì)象的方法。
5. 如權(quán)利要求1或4所述的Javascript中調(diào)用二進(jìn)制組件的方法,其特征在于,當(dāng) 調(diào)用的二進(jìn)制組件為CAR組件,在Javascript腳本中使用CAR組件的回調(diào)機(jī)制,實(shí)現(xiàn)在 Javascript中回調(diào)函數(shù)的同步和異步回調(diào)。
6. 如權(quán)利要求5所述的Javascript中調(diào)用二進(jìn)制組件的方法,其特征在于,該方法還 包括:當(dāng)調(diào)用的二進(jìn)制組件為CAR組件,Javascript引擎在初始化時(shí),創(chuàng)建一個(gè)回調(diào)執(zhí)行線 程執(zhí)行回調(diào)事件的回調(diào)函數(shù)。
7. 如權(quán)利要求6所述的Javascript中調(diào)用二進(jìn)制組件的方法,其特征在于,當(dāng)調(diào)用 CAR組件對(duì)象的方法而觸發(fā)回調(diào)事件時(shí),該回調(diào)事件的回調(diào)函數(shù)的執(zhí)行過(guò)程為: 當(dāng)該回調(diào)事件屬性為同步時(shí),若同步回調(diào)事件關(guān)聯(lián)的回調(diào)函數(shù)為Javascript函數(shù) 則由Javascript引擎主線程直接執(zhí)行該回調(diào)函數(shù),若同步回調(diào)事件關(guān)聯(lián)的回調(diào)函數(shù)非 Javascript函數(shù)則由回調(diào)執(zhí)行線程執(zhí)行該回調(diào)函數(shù); 當(dāng)該回調(diào)事件屬性是異步時(shí),Javascript主線程發(fā)送該回調(diào)事件給回調(diào)執(zhí)行線程,回 調(diào)執(zhí)行線程捕捉該異步回調(diào)事件,若該異步回調(diào)事件關(guān)聯(lián)的回調(diào)函數(shù)為Javascript函數(shù), 則回調(diào)執(zhí)行線程將該異步回調(diào)事件和回調(diào)函數(shù)打包并回拋給Javascript引擎主線程,若 該異步回調(diào)事件關(guān)聯(lián)的回調(diào)函數(shù)非Javascript函數(shù),則由回調(diào)執(zhí)行線程執(zhí)行該回調(diào)函數(shù)。
【文檔編號(hào)】G06F9/44GK104423932SQ201310367174
【公開(kāi)日】2015年3月18日 申請(qǐng)日期:2013年8月21日 優(yōu)先權(quán)日:2013年8月21日
【發(fā)明者】賈靖, 陳冬曉, 宋宇培 申請(qǐng)人:上??铺┦兰o(jì)科技有限公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
儋州市| 杂多县| 汾阳市| 长子县| 镇远县| 河池市| 阿拉尔市| 伊川县| 县级市| 泰来县| 新巴尔虎右旗| 建湖县| 丽水市| 休宁县| 张家界市| 东安县| 满城县| 和平县| 阳泉市| 二连浩特市| 定南县| 元阳县| 清徐县| 彭山县| 峨眉山市| 香港| 陆丰市| 海盐县| 烟台市| 怀来县| 贵溪市| 达州市| 伊川县| 马尔康县| 同江市| 浏阳市| 宜昌市| 古丈县| 朔州市| 蒲江县| 遂川县|