国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

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

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

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

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


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

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

      【專利附圖】

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

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

      【權(quán)利要求】
      1. 一種Javascript中調(diào)用二進(jìn)制組件的方法,應(yīng)用于Javascript引擎中,其特征在 于,該方法包括以下步驟以Javascript引擎的異常攔截方式實(shí)現(xiàn)調(diào)用二進(jìn)制組件: 判定步驟:Javascript引擎獲取Javascript語句中的字符串并判定該字符串是否為 Javascript語言節(jié)點(diǎn); 攔截步驟:若該字符串不是Javascript語言節(jié)點(diǎn),Javascript引擎的異常攔截器攔截 并獲取該字符串; 檢索步驟:從二進(jìn)制組件的加載路徑中查詢是否存在該字符串對應(yīng)的二進(jìn)制組件; 創(chuàng)建步驟:當(dāng)二進(jìn)制組件的加載路徑中存在與該字符串對應(yīng)的二進(jìn)制組件時,創(chuàng)建該 字符串對應(yīng)的二進(jìn)制組件對象并封裝為Javascript對象。
      2. 如權(quán)利要求1所述的Javascript中調(diào)用二進(jìn)制組件的方法,其特征在于,該方法還 包括:當(dāng)判定Javascript語句中的字符串為Javascript語言節(jié)點(diǎn),Javascript引擎解釋 并執(zhí)行該Javascript語句。
      3. 如權(quán)利要求1所述的Javascript中調(diào)用二進(jìn)制組件的方法,其特征在于,該方法還 包括:當(dāng)二進(jìn)制組件的加載路徑中未查詢到該字符串對應(yīng)的二進(jìn)制組件時,Javascript引 擎進(jìn)行異常報錯處理。
      4. 如權(quán)利要求1所述的Javascript中調(diào)用二進(jìn)制組件的方法,其特征在于,該方法還 以XPCOM組件封裝二進(jìn)制組件的方式實(shí)現(xiàn)調(diào)用二進(jìn)制組件,包括以下步驟: 注冊步驟:注冊一個封裝所有二進(jìn)制組件的XPCOM組件; 重寫步驟:重寫該XPCOM組件創(chuàng)建對象的方法; 判定步驟:當(dāng)Javascript引擎調(diào)用XPCOM組件對象的方法時,若調(diào)用方法的對象為上 述XPCOM組件封裝的二進(jìn)制組件創(chuàng)建的對象,則使用二進(jìn)制組件內(nèi)部自建的方法調(diào)用該對 象的方法,若調(diào)用方法的對象為標(biāo)準(zhǔn)XPCOM組件創(chuàng)建的對象,則調(diào)用XPCOM的標(biāo)準(zhǔn)Call方 法調(diào)用該對象的方法。
      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引擎在初始化時,創(chuàng)建一個回調(diào)執(zhí)行線 程執(zhí)行回調(diào)事件的回調(diào)函數(shù)。
      7. 如權(quán)利要求6所述的Javascript中調(diào)用二進(jìn)制組件的方法,其特征在于,當(dāng)調(diào)用 CAR組件對象的方法而觸發(fā)回調(diào)事件時,該回調(diào)事件的回調(diào)函數(shù)的執(zhí)行過程為: 當(dāng)該回調(diào)事件屬性為同步時,若同步回調(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)事件屬性是異步時,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ù)。
      【文檔編號】G06F9/44GK104423932SQ201310367174
      【公開日】2015年3月18日 申請日期:2013年8月21日 優(yōu)先權(quán)日:2013年8月21日
      【發(fā)明者】賈靖, 陳冬曉, 宋宇培 申請人:上海科泰世紀(jì)科技有限公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
      1