專利名稱:一種無(wú)線標(biāo)記語(yǔ)言腳本的執(zhí)行方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)及嵌入式領(lǐng)域,特別涉及一種WMLScript腳本的執(zhí)行方法及裝置。
背景技術(shù):
在2G (second generation,第二代移動(dòng)通訊技術(shù))時(shí)代,由于受到制約無(wú)線網(wǎng)絡(luò) 的帶寬的限制,因此移動(dòng)設(shè)備上主要是wap (Wireless ApplicationProtocol,無(wú)線應(yīng)用協(xié) 議)瀏覽器。隨著第三代移動(dòng)網(wǎng)絡(luò)的普及,制約無(wú)線網(wǎng)絡(luò)的帶寬問(wèn)題不復(fù)存在,另外隨著移 動(dòng)終端智能化的發(fā)展,CPU主頻越來(lái)越高,及終端屏幕尺寸越來(lái)越大,移動(dòng)終端已經(jīng)有足夠 的能力解析和顯示web (環(huán)球網(wǎng))網(wǎng)頁(yè)。在此背景下,移動(dòng)運(yùn)營(yíng)商提出了全功能瀏覽器的要求,即通過(guò)一個(gè)瀏覽器既能訪 問(wèn)WWW(World Wide Web,萬(wàn)維網(wǎng))網(wǎng)頁(yè),也能訪問(wèn)wap網(wǎng)頁(yè),這就需要瀏覽器內(nèi)部有不同的 引擎。Android 一詞的本義指“機(jī)器人”,同時(shí)也是一種基于Linux ( —種操作系統(tǒng))平臺(tái) 的開源移動(dòng)終端操作系統(tǒng)的名稱。該操作系統(tǒng)由操作系統(tǒng)內(nèi)核、中間件、用戶界面和應(yīng)用軟 件組成,采用軟件堆層(Software Stack,又名軟件疊層)的架構(gòu),主要分為三部分。底層以 Linux內(nèi)核工作為基礎(chǔ),由C ( 一種編程語(yǔ)言)語(yǔ)言開發(fā),只提供基本功能;中間層包括函數(shù) 庫(kù)(Library)和虛擬機(jī)(Virtual Machine),由C++(—種編程語(yǔ)言)語(yǔ)言開發(fā)。最上層是 各種應(yīng)用軟件,包括通話程序,短信程序等,由各公司自行開發(fā),以Java(—種編程語(yǔ)言)語(yǔ) 言作為編寫程序的一部分語(yǔ)言。WebKit是一個(gè)開源的瀏覽器內(nèi)核,Android操作系統(tǒng)使用它作為內(nèi)置瀏覽器的 內(nèi)核,并且將采用該內(nèi)核的瀏覽器稱為WebKit瀏覽器。WebKit瀏覽器高效穩(wěn)定,兼容性 好,并且源碼結(jié)構(gòu)清晰,易于維護(hù)。然而WebKit瀏覽器內(nèi)部只有javascript ( 一種腳本語(yǔ) 言)引擎,因此僅支持www網(wǎng)頁(yè)的訪問(wèn),WebKit瀏覽器中沒(méi)有WMLscript (Wireless Markup Language script,無(wú)線標(biāo)記語(yǔ)言腳本)引擎,不支持wap網(wǎng)頁(yè)中的WMLScript腳本。然而, 要在Android系統(tǒng)中使用其它的全功能瀏覽器,開發(fā)過(guò)程比較費(fèi)時(shí)費(fèi)力,且必須支付一定 的開發(fā)費(fèi)用。某些瀏覽器的性能也不是很好,運(yùn)行比較慢,布局不美觀,并且,這些瀏覽器均 不開放源代碼,在瀏覽器出現(xiàn)問(wèn)題后,也不方便進(jìn)行調(diào)試以解決問(wèn)題。
發(fā)明內(nèi)容
本發(fā)明實(shí)施例提供一種WMLscript引擎的實(shí)現(xiàn)方法及裝置,用于在WebKit瀏覽 器中實(shí)現(xiàn)對(duì)WMLScript腳本的支持,從而使WebKit瀏覽器支持WMLScript腳本語(yǔ)言,使 WebKit瀏覽器功能更加完善。一種無(wú)線標(biāo)記語(yǔ)言腳本W(wǎng)MLScript腳本的執(zhí)行方法,包括以下步驟當(dāng)wap網(wǎng)頁(yè)中包含WMLScript腳本的url時(shí),加載WMLScript腳本;受到點(diǎn)擊鏈接的觸發(fā)時(shí),調(diào)用WMLScript引擎;
3
通過(guò)WMLScript引擎調(diào)用WMLScript腳本,并獲得WMLScript腳本的內(nèi)容;執(zhí)行WMLScript腳本的內(nèi)容。一種無(wú)線標(biāo)記語(yǔ)言WMLScript腳本的執(zhí)行裝置,包括獲取模塊,用于當(dāng)wap網(wǎng)頁(yè)中包含WMLScript腳本的url時(shí),加載WMLScript腳 本;執(zhí)行模塊,用于當(dāng)受到點(diǎn)擊鏈接的觸發(fā)時(shí),調(diào)用WMLScript引擎;通過(guò)WMLScript 引擎調(diào)用WMLScript腳本,并獲得WMLScript腳本的內(nèi)容;執(zhí)行WMLScript腳本的內(nèi)容。本發(fā)明實(shí)施例當(dāng)wap網(wǎng)頁(yè)中包含WMLScript腳本的url時(shí),加載WMLScript腳本; 受到點(diǎn)擊鏈接的觸發(fā)時(shí),執(zhí)行WMLScript引擎;通過(guò)WMLScript引擎調(diào)用WMLScript腳本, 并獲得WMLScript腳本的內(nèi)容;執(zhí)行WMLScript腳本的內(nèi)容。從而在WebKit瀏覽器中加入 了 WMLscript引擎,以使WebKit瀏覽器支持WMLScript腳本,從而支持wap網(wǎng)頁(yè)的訪問(wèn)。
圖1為本發(fā)明實(shí)施例中WMLScript腳本的執(zhí)行裝置的主要結(jié)構(gòu)圖;圖2為本發(fā)明實(shí)施例中帶有解析模塊的WMLScript腳本的執(zhí)行裝置的主要結(jié)構(gòu) 圖;圖3為本發(fā)明實(shí)施例中WMLScript腳本的執(zhí)行裝置的詳細(xì)結(jié)構(gòu)圖;圖4為本發(fā)明實(shí)施例中WMLScript腳本的執(zhí)行方法的主要流程圖;圖5A為本發(fā)明實(shí)施例中WMLScript腳本的執(zhí)行方法的詳細(xì)流程圖;圖5B為本發(fā)明實(shí)施例中加入判斷過(guò)程后WMLScript腳本的執(zhí)行方法的詳細(xì)流程 圖。
具體實(shí)施例方式本發(fā)明實(shí)施例當(dāng)wap網(wǎng)頁(yè)中包含WMLScript腳本的url時(shí),加載WMLScript腳本; 受到點(diǎn)擊鏈接的觸發(fā)時(shí),執(zhí)行WMLScript引擎;通過(guò)WMLScript引擎調(diào)用WMLScript腳本, 并獲得WMLScript腳本的內(nèi)容;執(zhí)行WMLScript腳本的內(nèi)容。從而在WebKit瀏覽器中加入 了 WMLscript引擎,以使WebKit瀏覽器支持WMLScript腳本,從而支持wap網(wǎng)頁(yè)的訪問(wèn)。參見圖1,本發(fā)明實(shí)施例中WMLscript引擎的實(shí)現(xiàn)裝置包括獲取模塊101及執(zhí)行模 塊102。其中,所述裝置位于WebKit瀏覽器中。獲取模塊101用于獲取WMLScript腳本。獲取模塊101具體用于在解析模塊確定 網(wǎng)頁(yè)中g(shù)o (執(zhí)行)語(yǔ)句為鏈接屬性時(shí),根據(jù)獲取WMLScript腳本的函數(shù)加載WMLScript腳本 及獲取WMLScript腳本的內(nèi)容。例如,獲取WMLScript腳本的函數(shù)可以是IoadWMLScript。 WebKit瀏覽器中設(shè)置一個(gè)類,用于根據(jù)獲取WMLScript腳本的函數(shù)獲取WMLScript腳本、獲 取該WMLScript腳本的內(nèi)容及執(zhí)行該WMLScript腳本,例如,該類為WMLGoElement (wml執(zhí) 行要素),獲取WMLScript腳本的函數(shù)就位于WMLGoElement類中,其中,本發(fā)明實(shí)施例中獲 取WMLScript腳本的函數(shù)IoadWMLScript可以如下void IoadWMLScript(String url)其中,IoadWMLScript函數(shù)的具體內(nèi)容如下void WMLGoElement IoadWMLScript (String url) //IoadWMLScript 函數(shù)定義在WMLGoElement 類中;
{if ( ! isNeedRunWmlScript((char*)url. Iatinl ()· data()))//判斷是否需要運(yùn) 行WMLScript腳本,以解析url ;return ;Document^doc = document () -J/將當(dāng)前網(wǎng)頁(yè)的數(shù)據(jù)賦給變量;if( ! doc)return ;DocLoader^docLoader = doc- > docLoader () ;// 獲取當(dāng)前網(wǎng)頁(yè)的下載類,以方 便下載WMLScript腳本文件;if( ! docLoader)return ;if (NULL = = m_pCacheWMLScript)//判斷 m_pCacheWMLScript 變量是否為空。這 是出于安全考慮的步驟,以防nupCacheWMLScript變量不為空時(shí)影響執(zhí)行過(guò)程。也可以不 執(zhí)行本步驟,直接執(zhí)行下一步;m_pCacheWMLScript = docLoader- > requestScript (url, ‘‘ IS0-8859-1 “); //將WMLScript腳本的內(nèi)容賦給m_pCacheWMLScript變量,相當(dāng)于獲得了 WMLScript腳本 的內(nèi)容;if(m_pCacheWMLScript){m_pCacheWMLScript- > addClient (this) ;// 為下載功能增加一個(gè)客戶端,在下 載完成后通知該客戶端。其中,一個(gè)WMLScript腳本只需下載一次。return ;}}其中,WMLScript腳本的 url 指的是指向 WMLScript 腳本的 url,IoadWMLScript 函數(shù)用于獲取WMLScript腳本的內(nèi)容。WMLGoElement中還可以有一個(gè)變量,用于保存所述WMLScript腳本的內(nèi) 容,例如,本發(fā)明實(shí)施例中該變量可以為CachedResourceHandle<CachedScript>m_ pCacheWMLScript。參見圖2,所述裝置還包括解析模塊103。解析模塊103用于解析wap網(wǎng)頁(yè)。解析模塊103具體用于解析wap網(wǎng)頁(yè)中調(diào)用 的url,調(diào)用的函數(shù)名稱、調(diào)用的函數(shù)參數(shù)等。解析模塊103在解析wap網(wǎng)頁(yè)時(shí),解析到go 語(yǔ)句的時(shí)候,會(huì)首先根據(jù)WMLGoElement類創(chuàng)建對(duì)象,在創(chuàng)建完后會(huì)調(diào)用相應(yīng)函數(shù)來(lái)解析go 語(yǔ)句的屬性,例如,本發(fā)明實(shí)施例中該函數(shù)可以是WMLGoElement :parseMappedAttribute ( 解析映射屬性)函數(shù),該函數(shù)位于WMLGoElement類中,即判斷go語(yǔ)句是否為鏈接屬性,也 就是判斷需執(zhí)行的任務(wù)是否為鏈接屬性,如果解析模塊103解析出的go語(yǔ)句的屬性為鏈接 屬性,則調(diào)用獲取模塊101中的IoadWMLScript函數(shù),以獲取WMLScript腳本,并可以將該 WMLScript HP*白勺內(nèi)胃#入 CachedResourceHandle<CachedScript>m_pCacheWMLScript ^ 量中。定義全局變量;
定義url鏈接為字符串格式;執(zhí)行模塊102用于執(zhí)行WMLScript腳本的內(nèi)容。當(dāng)執(zhí)行模塊102受到點(diǎn)擊 鏈接的觸發(fā)時(shí),會(huì)調(diào)用相應(yīng)執(zhí)行函數(shù)來(lái)執(zhí)行WMLScript引擎例如,該執(zhí)行函數(shù)可以是 WMLGoElement executetask 函數(shù),該函數(shù)定義在 WMLGoElement 類中,用于執(zhí)行 WMLScript引擎。在本發(fā)明實(shí)施例中,需對(duì)相應(yīng)執(zhí)行函數(shù)進(jìn)行擴(kuò)展后該執(zhí)行函數(shù)才能完成執(zhí)行 WMLScript引擎的任務(wù)。例如,對(duì)該executetask(執(zhí)行任務(wù))函數(shù)進(jìn)行如下擴(kuò)展if (isNeedRunWmlScript( (char*) href. Iatinl ()· data ())&&NULL ! = m_ pCacheWMLScript)//判斷此鏈接是否為有效的WMLScript腳本鏈接;{extern Document氺gdoc ;gdoc = doc ;String str = url. string ();String strScriptFun ;int pos = 0 ;pos = str. reverseFindC /'pos++ ;strScriptFun = str. substring (pos, str. length () -pos) ;// 獲取 WMLScript 鏈 接中的函數(shù)名稱;strScriptFun. r印Iace (〃 % 20 “, 〃 〃);strScriptFun = strScriptFun. stripWhiteSpace();calIWMLScriptFunc (strScriptFun. Iatinl (). data (), WMLscript 引擎;m_pCacheWMLScript- > script (). Iatinl (). data (), 以參數(shù)的方式傳遞給引擎執(zhí)行;m_pCacheWMLScript- > script (). length ());gdoc = NULL ;
獲取腳本文件名;
替換多余空格; 替換多余空格; //開始執(zhí)行
獲取腳本的內(nèi)容,
傳入腳本長(zhǎng)度m_pCacheWMLScript-> destroyDecodedData() ;//釋放據(jù)口本內(nèi)容,以 免該內(nèi)容繼續(xù)占用內(nèi)存,造成內(nèi)存泄露;return ;}在WebKit瀏覽器中引入了 WMLscript引擎,從而使WebKit瀏覽器支持。其中, calIWMLScriptFunc是實(shí)現(xiàn)WMLscript引擎的入口函數(shù),用于調(diào)用WMLScript腳本、獲得 WMLScript腳本內(nèi)容及執(zhí)行WMLScript腳本內(nèi)容。所有執(zhí)行WMLScript腳本的過(guò)程都是從 此函數(shù)開始。calIWMLScriptFunc函數(shù)的具體內(nèi)容如下int calIWMLScriptFunc (const char氺uri, const char氺pScript, int scrit— Ien)// 定義 calIWMLScriptFunc 函數(shù)的三個(gè)參數(shù),包括 uri、WMLScript 腳本及 WMLScript
腳本的長(zhǎng)度;{
WMLScriptSlot result = {0}
unsigned short numApps = 0 ;int byteCodeLen = 0 ;int freeFlag = 0 ; //初始化,先將參數(shù)的值均置零;if( (NULL = = pScript) | | (scrit_len 彡=0)) {// 判斷腳本長(zhǎng)度是否為 0 ;return 0 ;}if( ! isValidByteCode(pScript, scrit_len)){if(WMLS_0K ! = compilerffmlScript((char*)pScript, scrit_ len, &gpWmlScriptCode,&byteCodeLen)) // 判斷腳本的內(nèi)容是否為有效的 WMLScript 的二進(jìn)制格式,否則有可能是文本方式的腳本,需要先把文本方式的腳本編譯為二進(jìn)制的 腳本;return 0 ;if ((NULL = = gpffmlScriptCode) | | (byteCodeLen < = 0))return 0 ;freeFlag = 1 ;}else{gpffmlScriptCode = (char*)malIoc(scrit_len+l);memset(gpffmlScriptCode,0, scrit_len+l);memcpy (gpffmlScriptCode, pScript, scrit_len) ;// WMLScript HP HiSi WMLScript腳本的內(nèi)容傳遞到執(zhí)行變量中,以執(zhí)行WMLScript腳本的內(nèi)容;}//execute scriptWMLScriptExecute (gScriptRef, uri, &result) ;// Jfiu^Mf WMLScriptVX 下均為執(zhí)行過(guò)程;if((freeFlag)&&(NULL ! = gpffmlScriptCode)) {ws_free_byte_code((unsigned char*)gpffmlScriptCode);gpffmlScriptCode = NULL ;freeFlag = 0 ;}else{if(NULL ! = gpffmlScriptCode){free (gpffmlScriptCode);gpffmlScriptCode = NULL ;}
}return 1 ;}int WMLScriptExecute (WMLScriptLibGlobals*gP, const char*uri, WMLScriptSlot*rs){
short findex = 0 ;unsigned char argc = 0 ;char氺str = *ptr = NULL ;WMLScriptModule^m ;WMLScriptSlot氺stack ;WMLScriptFunction氺fp ;str = strchr((char*)uri, ‘ #');if (str == NULL) return WMLScriptErrInval idURI ;m = WMLScriptLoadModule (gP, uri, str-uri,&err);if (m == NULL)return-1 ;ptr = strchr(++str,'(');if (ptr == NULL)return WMLScriptErrInvalidURI ;findex = WMLScriptFindFunc (m, str, ptr-str);if (findex < 0)return WMLScriptErrFunctionNotFound ;當(dāng)在獲取模塊101中加入獲取WMLScript腳本的函數(shù),并對(duì)執(zhí)行模塊102中相 應(yīng)執(zhí)行函數(shù)作出擴(kuò)展后,就在WebKit瀏覽器中實(shí)現(xiàn)了 WMLscript引擎。當(dāng)將WMLscript 引擎移植入WebKit瀏覽器后,可由解析模塊103解析wap網(wǎng)頁(yè)中調(diào)用的url、調(diào)用的函數(shù) 名稱、調(diào)用的函數(shù)參數(shù)等,解析模塊103若解析到go (語(yǔ)句)為鏈接屬性,則獲取模塊101 加載WMLScript腳本及WMLScript腳本的內(nèi)容,執(zhí)行模塊102調(diào)用WMLscript引擎,通過(guò) WMLscript引擎調(diào)用WMLScript腳本,獲得并執(zhí)行WMLScript腳本的內(nèi)容。具體的,解析模塊 103 解析網(wǎng)頁(yè)中調(diào)用的 url,例如,該 url 可以為 getCapital.wmls#getCapital (‘capital,, $(C0Untry_name)’),是一個(gè)用于根據(jù)國(guó)家名稱獲取該國(guó)家首都名稱的函數(shù)。解析模 塊103解析調(diào)用的函數(shù)名稱getcapital (獲知首都),解析調(diào)用的函數(shù)的參數(shù),參數(shù) 1 'capital’(首都),參數(shù) 2 ,country_name,(國(guó)家名)。獲取模塊 101 加載該 WMLScript 腳本及該WMLScript腳本的內(nèi)容,執(zhí)行模塊102調(diào)用WMLscript引擎,WMLscript引擎通過(guò) 函數(shù)名稱getcapital獲取到函數(shù)代碼開始處的地址,將此地址設(shè)置為程序執(zhí)行的入口點(diǎn)。 把函數(shù)調(diào)用的參數(shù)(參數(shù)1 ,capital’,參數(shù)2 ,country_name')傳入給函數(shù)使用,較 佳的,可以通過(guò)壓棧的方式傳入給函數(shù)使用,其中,壓棧的特征是先入后出,后入先出。然后 開始根據(jù)調(diào)用的函數(shù)取指令,根據(jù)不同的0pc0de(操作碼)值,跳轉(zhuǎn)到相應(yīng)位置執(zhí)行流程。 依次解析執(zhí)行指令,每解析完一個(gè)指令即修改IP (指針),使其指向下一個(gè)地址,一直到函 數(shù)的結(jié)束。其中,如果指令中有call (調(diào)用)指令,則還需調(diào)用庫(kù)函數(shù)。庫(kù)函數(shù)主要分為兩 大類標(biāo)準(zhǔn)庫(kù)函數(shù)和瀏覽器相關(guān)的庫(kù)函數(shù)。標(biāo)準(zhǔn)庫(kù)函數(shù)主要涉及到浮點(diǎn)數(shù)(Float)及字符 串(String)等的相關(guān)功能,瀏覽器相關(guān)的函數(shù)主要涉及到網(wǎng)頁(yè)中變量的獲取及賦值、url 的解析等等,例如WTAPublic函數(shù)主要涉及到打電話等相關(guān)功能。這些庫(kù)函數(shù)的功能都是 wmlscript預(yù)先規(guī)范定義好的,但具體的實(shí)現(xiàn)過(guò)程卻與平臺(tái)及使用的瀏覽器相關(guān)。參見圖3,所述裝置還包括編譯模塊104。WMLScript腳本的內(nèi)容的形式一般分為文本文件或編譯好的二進(jìn)制字節(jié)碼文件。對(duì)于文本文件形式的WMLScript腳本的內(nèi)容,目前瀏覽器無(wú)法執(zhí)行,因此必須將其轉(zhuǎn)換為 二進(jìn)制字節(jié)碼文件方可執(zhí)行。執(zhí)行模塊102還用于判斷獲取的WMLScript腳本的內(nèi)容是否是二進(jìn)制字節(jié)碼文 件。如果判斷結(jié)果為否,所獲取的WMLScript腳本的內(nèi)容不是二進(jìn)制字節(jié)碼文件而是文本 文件,則需編譯模塊104先將其編譯為二進(jìn)制字節(jié)碼文件,再由執(zhí)行模塊102執(zhí)行;如果判 斷結(jié)果為是,所獲取的WMLScript腳本的內(nèi)容是二進(jìn)制字節(jié)碼文件,則由執(zhí)行模塊102直接 執(zhí)行。編譯模塊104用于將文本文件形式的WMLScript腳本的內(nèi)容編譯為二進(jìn)制字節(jié)碼 文件。執(zhí)行模塊102開始執(zhí)行WMLScript腳本的內(nèi)容時(shí),獲取模塊101需首先WMLScript 腳本的內(nèi)容,根據(jù)使用不同的apn(Access Point Name,接入點(diǎn)名稱),WMLScript腳本的內(nèi) 容分為文本文件或編譯好的二進(jìn)制字節(jié)碼文件,編譯模塊104當(dāng)加載的WMLScript腳本的 內(nèi)容文件為文本文件時(shí),將其編譯為二進(jìn)制字節(jié)碼文件,再由執(zhí)行模塊102調(diào)用WMLscript 引擎來(lái)執(zhí)行。這樣可以使WebKit瀏覽器功能更加優(yōu)化,無(wú)論使用何種網(wǎng)關(guān),WebKit瀏覽器 都能夠支持WMLScript腳本。下面通過(guò)實(shí)現(xiàn)流程來(lái)介紹WMLscript引擎的實(shí)現(xiàn)方法。參見圖4,本發(fā)明實(shí)施例介紹WMLscript引擎的主要實(shí)現(xiàn)方法。方法流程如下步驟401 當(dāng)wap網(wǎng)頁(yè)中包含WMLScript腳本的url時(shí),加載WMLScript腳本。其 中,WMLScript腳本的url指的是指向WMLScript腳本的url步驟402 受到點(diǎn)擊鏈接的觸發(fā)時(shí),執(zhí)行WMLScript引擎。步驟403 通過(guò)wmlscript引擎調(diào)用WMLScript腳本,并獲得WMLScript腳本的內(nèi)容。步驟404 執(zhí)行WMLScript腳本的內(nèi)容。參見圖5A,本發(fā)明實(shí)施例介紹WMLscript引擎的詳細(xì)實(shí)現(xiàn)方法。方法流程如下首先需在WebKit瀏覽器中加入獲取WMLScript腳本的函數(shù)。其中,該獲取 WMLScript腳本的函數(shù)可以定義在WMLGoElement類中,函數(shù)名可以是IoadWMLScript。還 可以同時(shí)定義一個(gè)用于保存WMLScript腳本的內(nèi)容的變量,例如該變量為CachedResource Handle<CachedScript>m_pCacheWMLScript。還需擴(kuò)展WebKit瀏覽器中相關(guān)執(zhí)行函數(shù)的內(nèi)容。例如,在本發(fā)明實(shí)施例中,該 函數(shù)可以是WMLGoElement: :executetask,該函數(shù)定義在WMLGoElement類中,用于執(zhí)行 WMLscript引擎,通過(guò)獲得WMLscript引擎的入口函數(shù),實(shí)現(xiàn)WMLscript引擎。步驟501 解析wap網(wǎng)頁(yè)。步驟502 判斷go語(yǔ)句是否為鏈接屬性。當(dāng)判斷結(jié)果為是時(shí),繼續(xù)步驟503,否則 結(jié)束流程。步驟503 調(diào)用獲取WMLScript腳本的函數(shù),加載WMLScript腳本及該WMLScript 腳本的內(nèi)容。其中,可以用IoadWMLScript函數(shù)獲取WMLScript腳本。步驟504:將加載的WMLScript腳本的內(nèi)容存入變量中。其中,該變量可以是Cac hedResourceHandle<CachedScript>m_pCacheWMLScript。解析模塊103在解析wap網(wǎng)頁(yè)時(shí),解析到go (執(zhí)行)語(yǔ)句的時(shí)候,會(huì)先根據(jù) WMLGoElement 類創(chuàng)建對(duì)象,在創(chuàng)建完畢后調(diào)用 WMLGoElement: :parseMappedAttribute 函
9數(shù)來(lái)解析go語(yǔ)句的屬性,如果解析模塊103解析出的go語(yǔ)句的屬性為鏈接屬性,則會(huì)調(diào)用 獲取模塊103中的IoadWMLScript函數(shù),以加載WMLScript腳本及該WMLScript腳本的內(nèi) ,以亥內(nèi)·#入 CachedResourceHandle<CachedScript>m_pCacheWMLScript ^M 中。步驟505 受到點(diǎn)擊鏈接事件的觸發(fā)。步驟506 調(diào)用 WMLGoElement: :executetask 函數(shù)以執(zhí)行 WMLScript 引擎。步驟507 通過(guò)WMLScript引擎調(diào)用WMLScript腳本并執(zhí)行WMLScript腳本的內(nèi)容。參見圖5B,本發(fā)明實(shí)施例中加入了判斷過(guò)程,以判斷WMLScript腳本是文本文件 還是二進(jìn)制字節(jié)碼文件。詳細(xì)方法流程如下步驟511 解析wap網(wǎng)頁(yè)。WebKit瀏覽器受到點(diǎn)擊鏈接事件的觸發(fā)。步驟512:判斷go語(yǔ)句是否為鏈接屬性。當(dāng)判斷結(jié)果為是時(shí),繼續(xù)步驟513,否則 結(jié)束流程。步驟513 調(diào)用獲取WMLScript腳本的函數(shù),加載WMLScript腳本及該WMLScript 腳本的內(nèi)容。其中,可以用IoadWMLScript函數(shù)獲取WMLScript腳本。步驟514:將加載的WMLScript腳本的內(nèi)容存入變量中。其中,該變量可以是Cac hedResourceHandle<CachedScript>m_pCacheWMLScript。步驟515 受到點(diǎn)擊鏈接事件的觸發(fā)。步驟516 判斷獲取的WMLScript腳本的內(nèi)容是否為二進(jìn)制字節(jié)碼文件。當(dāng)判斷 結(jié)果為否,繼續(xù)步驟517,否則繼續(xù)步驟518。步驟517 將獲取的文本文件形式的WMLScript腳本的內(nèi)容編譯為二進(jìn)制字節(jié)碼 文件形式。步驟518 調(diào)用 WMLGoElement: :executetask 函數(shù)以執(zhí)行 WMLScript 引擎。步驟519 通過(guò)WMLscript引擎調(diào)用WMLScript腳本并執(zhí)行WMLScript腳本的內(nèi)容。本發(fā)明實(shí)施例當(dāng)wap網(wǎng)頁(yè)中包含WMLScript腳本的url時(shí),加載WMLScript腳本; 受到點(diǎn)擊鏈接的觸發(fā)時(shí),執(zhí)行WMLScript引擎;通過(guò)WMLScript引擎調(diào)用WMLScript腳本, 并獲得WMLScript腳本的內(nèi)容;執(zhí)行WMLScript腳本的內(nèi)容。從而在WebKit瀏覽器中加 入了 WMLscript引擎,以使WebKit瀏覽器支持WMLScript腳本,從而支持wap網(wǎng)頁(yè)的訪問(wèn)。 本發(fā)明實(shí)施例還在 WMLGoElement 類中增加了 CachedResourceHandle<CachedScript>m_ pCacheWMLScript變量,用于保存加載的WMLScript腳本的內(nèi)容。只需在WebKit瀏覽器中 加入相關(guān)函數(shù)即可實(shí)現(xiàn)將WMLscript引擎植入WebKit瀏覽器中,實(shí)現(xiàn)過(guò)程簡(jiǎn)單,便于操作。 并且本發(fā)明實(shí)施例還加入了編譯模塊104,用于將文本文件形式的WMLScript腳本的內(nèi)容 編譯為WebKit瀏覽器可執(zhí)行的二進(jìn)制字節(jié)碼文件,以避免當(dāng)apn不同時(shí),因WMLScript腳 本的內(nèi)容為文本文件形式而導(dǎo)致該腳本無(wú)法執(zhí)行,使WebKit瀏覽器的功能更加優(yōu)化,保證 無(wú)論在使用何種網(wǎng)關(guān)的情況下WebKit瀏覽器都能夠支持WMLScript腳本。本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本發(fā)明的實(shí)施例可提供為方法、系統(tǒng)、或計(jì)算機(jī)程序 產(chǎn)品。因此,本發(fā)明可采用完全硬件實(shí)施例、完全軟件實(shí)施例、或結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本發(fā)明可采用在一個(gè)或多個(gè)其中包含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī) 可用存儲(chǔ)介質(zhì)(包括但不限于磁盤存儲(chǔ)器和光學(xué)存儲(chǔ)器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形 式。本發(fā)明是參照根據(jù)本發(fā)明實(shí)施例的方法、設(shè)備(系統(tǒng))、和計(jì)算機(jī)程序產(chǎn)品的流程 圖和/或方框圖來(lái)描述的。應(yīng)理解可由計(jì)算機(jī)程序指令實(shí)現(xiàn)流程圖和/或方框圖中的每一 流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計(jì)算 機(jī)程序指令到通用計(jì)算機(jī)、專用計(jì)算機(jī)、嵌入式處理機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理 器以產(chǎn)生一個(gè)機(jī)器,使得通過(guò)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生 用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能 的裝置。這些計(jì)算機(jī)程序指令也可存儲(chǔ)在能引導(dǎo)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備以特 定方式工作的計(jì)算機(jī)可讀存儲(chǔ)器中,使得存儲(chǔ)在該計(jì)算機(jī)可讀存儲(chǔ)器中的指令產(chǎn)生包括指 令裝置的制造品,該指令裝置實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或 多個(gè)方框中指定的功能。這些計(jì)算機(jī)程序指令也可裝載到計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計(jì) 算機(jī)或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的處理,從而在計(jì)算機(jī)或 其他可編程設(shè)備上執(zhí)行的指令提供用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖 一個(gè)方框或多個(gè)方框中指定的功能的步驟。顯然,本領(lǐng)域的技術(shù)人員可以對(duì)本發(fā)明進(jìn)行各種改動(dòng)和變型而不脫離本發(fā)明的精 神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍 之內(nèi),則本發(fā)明也意圖包含這些改動(dòng)和變型在內(nèi)。
權(quán)利要求
一種無(wú)線標(biāo)記語(yǔ)言腳本W(wǎng)MLScript腳本的執(zhí)行方法,其特征在于,包括以下步驟當(dāng)無(wú)線應(yīng)用協(xié)議wap網(wǎng)頁(yè)中包含WMLScript腳本的統(tǒng)一資源定位url時(shí),加載WMLScript腳本;受到點(diǎn)擊鏈接的觸發(fā)時(shí),調(diào)用WMLScript引擎;通過(guò)WMLScript引擎調(diào)用WMLScript腳本,并獲得WMLScript腳本的內(nèi)容;執(zhí)行WMLScript腳本的內(nèi)容。
2.如權(quán)利要求1所述的方法,其特征在于,在當(dāng)wap網(wǎng)頁(yè)中包含WMLScript腳本的url 時(shí),加載WMLScript腳本之前還包括步驟判斷需執(zhí)行的任務(wù)是否為鏈接屬性;當(dāng)wap網(wǎng)頁(yè)中包含WMLScript腳本的url時(shí),加載WMLScript腳本的步驟包括當(dāng)判斷 結(jié)果為是時(shí),獲取當(dāng)前網(wǎng)頁(yè)中的數(shù)據(jù)及當(dāng)前網(wǎng)頁(yè)中的下載類,以加載WMLScript腳本。
3.如權(quán)利要求1所述的方法,其特征在于,執(zhí)行wmlscript引擎的步驟包括獲取 WMLScript腳本文件名、WMLScript腳本的url中的函數(shù)名稱和WMLScript腳本長(zhǎng)度。
4.如權(quán)利要求3所述的方法,其特征在于,調(diào)用WMLScript腳本,并獲得WMLScript腳 本的內(nèi)容的步驟包括根據(jù)所述WMLScript腳本文件名、WMLScript腳本的url中的函數(shù)名 稱和WMLScript腳本長(zhǎng)度,獲取WMLScript腳本的內(nèi)容。
5.如權(quán)利要求1所述的方法,其特征在于,在執(zhí)行WMLScript腳本的內(nèi)容之前還包括步 驟判斷所述獲取的WMLScript腳本的內(nèi)容是否為二進(jìn)制字節(jié)碼文件,當(dāng)判斷結(jié)果為否時(shí), 將所述獲取的WMLScript腳本的內(nèi)容編譯為二進(jìn)制字節(jié)碼文件。
6.一種無(wú)線標(biāo)記語(yǔ)言WMLScript腳本的執(zhí)行裝置,其特征在于,包括獲取模塊,用于當(dāng)wap網(wǎng)頁(yè)中包含WMLScript腳本的url時(shí),加載WMLScript腳本;執(zhí)行模塊,用于當(dāng)受到點(diǎn)擊鏈接的觸發(fā)時(shí),調(diào)用WMLScript引擎;通過(guò)WMLScript引擎 調(diào)用WMLScript腳本,并獲得WMLScript腳本的內(nèi)容;執(zhí)行WMLScript腳本的內(nèi)容。
7.如權(quán)利要求6所述的裝置,其特征在于,還包括解析模塊,用于判斷需執(zhí)行的任務(wù) 是否為鏈接屬性;當(dāng)判斷結(jié)果為是時(shí),所述獲取模塊獲取當(dāng)前網(wǎng)頁(yè)中的數(shù)據(jù)及當(dāng)前網(wǎng)頁(yè)中的下載類,以 加載WMLScript腳本。
8.如權(quán)利要求6所述的裝置,其特征在于,所述執(zhí)行模塊用于獲取WMLScript腳本文件 名、WMLScript腳本的url中的函數(shù)名稱和WMLScript腳本長(zhǎng)度。
9.如權(quán)利要求8所述的裝置,其特征在于,所述執(zhí)行模塊用于根據(jù)所述WMLScript腳本 文件名、WMLScript腳本的url中的函數(shù)名稱和WMLScript腳本長(zhǎng)度,獲取WMLScript腳本 的內(nèi)容。
10.如權(quán)利要求6所述的裝置,其特征在于,所述執(zhí)行模塊還用于判斷所述獲取的 WMLScript腳本的內(nèi)容是否為二進(jìn)制字節(jié)碼文件;當(dāng)判斷結(jié)果為否時(shí),還包括編譯模塊,用于將所述獲取的WMLScript腳本的內(nèi)容編譯 為二進(jìn)制字節(jié)碼文件。
全文摘要
本發(fā)明公開了一種WMLScript腳本的執(zhí)行方法,用于在WebKit瀏覽器中實(shí)現(xiàn)對(duì)WMLScript腳本的支持,從而使WebKit瀏覽器支持WMLScript腳本語(yǔ)言,使WebKit瀏覽器功能更加完善。所述方法包括當(dāng)無(wú)線應(yīng)用協(xié)議wap網(wǎng)頁(yè)中包含WMLScript腳本的url時(shí),加載WMLScript腳本;受到點(diǎn)擊鏈接的觸發(fā)時(shí),調(diào)用WMLScript引擎;通過(guò)WMLScript引擎調(diào)用WMLScript腳本,并獲得WMLScript腳本的內(nèi)容;執(zhí)行WMLScript腳本的內(nèi)容。本發(fā)明還公開了用于實(shí)現(xiàn)所述方法的裝置。
文檔編號(hào)G06F17/30GK101944120SQ20101028894
公開日2011年1月12日 申請(qǐng)日期2010年9月19日 優(yōu)先權(quán)日2010年9月19日
發(fā)明者王勇 申請(qǐng)人:青島海信移動(dòng)通信技術(shù)股份有限公司