本發(fā)明實(shí)施例涉及計(jì)算機(jī)技術(shù)領(lǐng)域,尤其涉及一種擴(kuò)展接口調(diào)用方法及裝置。
背景技術(shù):
webapp是指基于web的系統(tǒng)和應(yīng)用,當(dāng)用戶需要使用webapp時(shí),需要先打開瀏覽器,并在瀏覽器中輸入webapp對(duì)應(yīng)的網(wǎng)址,以實(shí)現(xiàn)打開并運(yùn)行webapp。
在實(shí)際應(yīng)用過程中,通常使用超級(jí)文本標(biāo)記語(yǔ)言(hypertextmarkuplanguage,簡(jiǎn)稱html)開發(fā)webapp,但是html標(biāo)準(zhǔn)的局限性較大,導(dǎo)致通過html無(wú)法使得開發(fā)的webapp具有豐富的功能。為了使得通過html開發(fā)的webapp具有豐富的功能,通常需要在html標(biāo)準(zhǔn)中增設(shè)擴(kuò)展接口,并通過擴(kuò)展接口實(shí)現(xiàn)豐富的功能。在現(xiàn)有技術(shù)中,通常將擴(kuò)展接口和用于實(shí)現(xiàn)該擴(kuò)展接口的擴(kuò)展接口實(shí)現(xiàn)模塊集成在瀏覽器內(nèi)核,這樣,在瀏覽器進(jìn)程中運(yùn)行webapp的過程中,當(dāng)webapp對(duì)擴(kuò)展接口調(diào)用時(shí),擴(kuò)展接口實(shí)現(xiàn)模塊可以直接在瀏覽器進(jìn)程中向webapp反饋擴(kuò)展接口對(duì)應(yīng)的調(diào)用結(jié)果,以實(shí)現(xiàn)擴(kuò)展接口提供的功能。
然而,由于不同類型的瀏覽器具有不同的規(guī)則,因此,在瀏覽器中增設(shè)擴(kuò)展接口的擴(kuò)展接口實(shí)現(xiàn)模塊時(shí),需要根據(jù)相應(yīng)瀏覽器的規(guī)則,編寫對(duì)應(yīng)的擴(kuò)展接口實(shí)現(xiàn)模塊,也就是說(shuō),接口擴(kuò)展在不同瀏覽器的通用性不強(qiáng)。而用戶可能通過不同類型的瀏覽器使用同一webapp,因此,當(dāng)需要在webapp中增加豐富的功能時(shí),需要在不同類型的瀏覽器中增設(shè)不同的擴(kuò)展接口實(shí)現(xiàn)模塊,導(dǎo)致對(duì)webapp的開發(fā)成本過高。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明實(shí)施例提供一種擴(kuò)展接口調(diào)用方法及裝置,降低了對(duì)webapp的開發(fā)成本。
第一方面,本發(fā)明實(shí)施例提供一種擴(kuò)展接口調(diào)用方法,包括:
獲取所述webapp在瀏覽器進(jìn)程中對(duì)擴(kuò)展接口進(jìn)行調(diào)用的調(diào)用指令,所述調(diào)用指令為進(jìn)程內(nèi)部的指令;
根據(jù)所述調(diào)用指令,向所述擴(kuò)展接口對(duì)應(yīng)的擴(kuò)展接口實(shí)現(xiàn)模塊發(fā)送所述調(diào)用指令對(duì)應(yīng)的調(diào)用請(qǐng)求,以使所述擴(kuò)展接口實(shí)現(xiàn)模塊通過非瀏覽器進(jìn)程獲取所述調(diào)用請(qǐng)求對(duì)應(yīng)的調(diào)用結(jié)果,所述擴(kuò)展接口實(shí)現(xiàn)模塊位于所述瀏覽器的內(nèi)核之外,所述調(diào)用請(qǐng)求為在不同進(jìn)程間傳輸?shù)恼?qǐng)求消息;
接收所述擴(kuò)展接口實(shí)現(xiàn)模塊發(fā)送的調(diào)用結(jié)果,并通過所述瀏覽器進(jìn)程向所述webapp發(fā)送所述調(diào)用請(qǐng)求對(duì)應(yīng)的調(diào)用結(jié)果。
在一種實(shí)施方式中,向所述擴(kuò)展接口對(duì)應(yīng)的擴(kuò)展接口實(shí)現(xiàn)模塊發(fā)送調(diào)用請(qǐng)求,包括:
根據(jù)所述調(diào)用指令,生成所述調(diào)用指令對(duì)應(yīng)的調(diào)用請(qǐng)求;
通過所述瀏覽器進(jìn)程對(duì)應(yīng)的第一通信模塊向所述非瀏覽器進(jìn)程對(duì)應(yīng)的第二通信模塊發(fā)送所述調(diào)用請(qǐng)求,以使所述第二通信模塊向所述擴(kuò)展接口實(shí)現(xiàn)模塊發(fā)送所述調(diào)用請(qǐng)求。
在另一種實(shí)施方式中,接收所述擴(kuò)展接口實(shí)現(xiàn)模塊發(fā)送的調(diào)用結(jié)果,包括:
通過所述第一通信模塊接收所述擴(kuò)展接口實(shí)現(xiàn)模塊通過所述第二通信模塊發(fā)送的所述調(diào)用結(jié)果。
在另一種實(shí)施方式中,向所述擴(kuò)展接口對(duì)應(yīng)的擴(kuò)展接口實(shí)現(xiàn)模塊發(fā)送調(diào)用請(qǐng)求之后,還包括:
生成所述調(diào)用請(qǐng)求的會(huì)話標(biāo)識(shí);
生成所述調(diào)用請(qǐng)求對(duì)應(yīng)的結(jié)果接收器,并確定所述結(jié)果接收器與所述調(diào)用請(qǐng)求的會(huì)話標(biāo)識(shí)的對(duì)應(yīng)關(guān)系。
在另一種實(shí)施方式中,通過所述瀏覽器進(jìn)程向所述webapp發(fā)送所述調(diào)用請(qǐng)求對(duì)應(yīng)的調(diào)用結(jié)果,包括:
獲取所述調(diào)用結(jié)果的會(huì)話標(biāo)識(shí),所述調(diào)用結(jié)果的會(huì)話標(biāo)識(shí)與所述調(diào)用請(qǐng)求的會(huì)話標(biāo)識(shí)相同;
根據(jù)所述調(diào)用結(jié)果的會(huì)話標(biāo)識(shí)和預(yù)設(shè)對(duì)應(yīng)關(guān)系,確定所述調(diào)用結(jié)果對(duì)應(yīng)的結(jié)果接收器,所述預(yù)設(shè)對(duì)應(yīng)關(guān)系中包括多個(gè)會(huì)話標(biāo)識(shí)及各會(huì)話標(biāo)識(shí)對(duì)應(yīng)的結(jié)果接收器;
向所述調(diào)用結(jié)果對(duì)應(yīng)的結(jié)果接收器發(fā)送所述調(diào)用結(jié)果,以使所述調(diào)用結(jié)果對(duì)應(yīng)的結(jié)果接收器向所述webapp發(fā)送所述調(diào)用結(jié)果。
第二方面,本發(fā)明實(shí)施例提供一種擴(kuò)展接口調(diào)用裝置,包括獲取模塊、發(fā)送模塊和接收模塊,其中,
所述獲取模塊用于,獲取所述webapp在瀏覽器進(jìn)程中對(duì)擴(kuò)展接口進(jìn)行調(diào)用的調(diào)用指令,所述調(diào)用指令為進(jìn)程內(nèi)部的指令;
所述發(fā)送模塊用于,根據(jù)所述調(diào)用指令,向所述擴(kuò)展接口對(duì)應(yīng)的擴(kuò)展接口實(shí)現(xiàn)模塊發(fā)送所述調(diào)用指令對(duì)應(yīng)的調(diào)用請(qǐng)求,以使所述擴(kuò)展接口實(shí)現(xiàn)模塊通過非瀏覽器進(jìn)程獲取所述調(diào)用請(qǐng)求對(duì)應(yīng)的調(diào)用結(jié)果,所述擴(kuò)展接口實(shí)現(xiàn)模塊位于所述瀏覽器的內(nèi)核之外,所述調(diào)用請(qǐng)求為在不同進(jìn)程間傳輸?shù)恼?qǐng)求消息;
所述接收模塊用于,接收所述擴(kuò)展接口實(shí)現(xiàn)模塊發(fā)送的調(diào)用結(jié)果,并通過所述瀏覽器進(jìn)程向所述webapp發(fā)送所述調(diào)用請(qǐng)求對(duì)應(yīng)的調(diào)用結(jié)果。
在一種實(shí)施方式中,所述發(fā)送模塊向所述擴(kuò)展接口對(duì)應(yīng)的擴(kuò)展接口實(shí)現(xiàn)模塊發(fā)送調(diào)用請(qǐng)求,包括:
根據(jù)所述調(diào)用指令,生成所述調(diào)用指令對(duì)應(yīng)的調(diào)用請(qǐng)求;
通過所述瀏覽器進(jìn)程對(duì)應(yīng)的第一通信模塊向所述非瀏覽器進(jìn)程對(duì)應(yīng)的第二通信模塊發(fā)送所述調(diào)用請(qǐng)求,以使所述第二通信模塊向所述擴(kuò)展接口實(shí)現(xiàn)模塊發(fā)送所述調(diào)用請(qǐng)求。
在另一種實(shí)施方式中,所述接收模塊接收所述擴(kuò)展接口實(shí)現(xiàn)模塊發(fā)送的調(diào)用結(jié)果,包括:
通過所述第一通信模塊接收所述擴(kuò)展接口實(shí)現(xiàn)模塊通過所述第二通信模塊發(fā)送的所述調(diào)用結(jié)果。
在另一種實(shí)施方式中,所述裝置還包括生成模塊,其中,在所述發(fā)送模塊向所述擴(kuò)展接口對(duì)應(yīng)的擴(kuò)展接口實(shí)現(xiàn)模塊發(fā)送調(diào)用請(qǐng)求之后,所述生成模塊用于:
生成所述調(diào)用請(qǐng)求的會(huì)話標(biāo)識(shí);
生成所述調(diào)用請(qǐng)求對(duì)應(yīng)的結(jié)果接收器,并確定所述結(jié)果接收器與所述調(diào)用請(qǐng)求的會(huì)話標(biāo)識(shí)的對(duì)應(yīng)關(guān)系。
在另一種實(shí)施方式中,所述發(fā)送模塊通過所述瀏覽器進(jìn)程向所述webapp發(fā)送所述調(diào)用請(qǐng)求對(duì)應(yīng)的調(diào)用結(jié)果,包括:
獲取所述調(diào)用結(jié)果的會(huì)話標(biāo)識(shí),所述調(diào)用結(jié)果的會(huì)話標(biāo)識(shí)與所述調(diào)用請(qǐng)求的會(huì)話標(biāo)識(shí)相同;
根據(jù)所述調(diào)用結(jié)果的會(huì)話標(biāo)識(shí)和預(yù)設(shè)對(duì)應(yīng)關(guān)系,確定所述調(diào)用結(jié)果對(duì)應(yīng)的結(jié)果接收器,所述預(yù)設(shè)對(duì)應(yīng)關(guān)系中包括多個(gè)會(huì)話標(biāo)識(shí)及各會(huì)話標(biāo)識(shí)對(duì)應(yīng)的結(jié)果接收器;
向所述調(diào)用結(jié)果對(duì)應(yīng)的結(jié)果接收器發(fā)送所述調(diào)用結(jié)果,以使所述調(diào)用結(jié)果對(duì)應(yīng)的結(jié)果接收器向所述webapp發(fā)送所述調(diào)用結(jié)果。
本發(fā)明實(shí)施例提供的擴(kuò)展接口調(diào)用方法和裝置,擴(kuò)展接口位于瀏覽器內(nèi)核,擴(kuò)展接口實(shí)現(xiàn)模塊位于瀏覽器內(nèi)核之外,在瀏覽器進(jìn)程中運(yùn)行webapp的過程中,當(dāng)webapp對(duì)擴(kuò)展接口進(jìn)行調(diào)用之后,可以向非瀏覽器內(nèi)核中的擴(kuò)展接口實(shí)現(xiàn)模塊發(fā)送消息形式的調(diào)用請(qǐng)求,以使擴(kuò)展接口實(shí)現(xiàn)模塊可以在非瀏覽器進(jìn)程中獲取調(diào)用請(qǐng)求對(duì)應(yīng)的調(diào)用結(jié)果,并將調(diào)用結(jié)果反饋給瀏覽器進(jìn)程中的webapp。在上述過程中,由于擴(kuò)展接口實(shí)現(xiàn)模塊位于瀏覽器內(nèi)核之外,使得開發(fā)者無(wú)需根據(jù)瀏覽器的規(guī)定開發(fā)擴(kuò)展接口實(shí)現(xiàn)模塊,針對(duì)所有類型的瀏覽器,均可以使用相同的擴(kuò)展接口實(shí)現(xiàn)模塊,進(jìn)而提高對(duì)不同類型瀏覽器的通用性,降低webapp的開發(fā)成本。
附圖說(shuō)明
為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作一簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明實(shí)施例提供的擴(kuò)展接口調(diào)用方法的應(yīng)用場(chǎng)景示意圖;
圖2為本發(fā)明實(shí)施例提供的擴(kuò)展接口調(diào)用方法的流程示意圖一;
圖3為本發(fā)明實(shí)施例提供的擴(kuò)展接口調(diào)用方法的流程示意圖二;
圖4為本發(fā)明實(shí)施例提供的擴(kuò)展接口調(diào)用裝置的結(jié)構(gòu)示意圖一;
圖5為本發(fā)明實(shí)施例提供的擴(kuò)展接口調(diào)用裝置的結(jié)構(gòu)示意圖二。
具體實(shí)施方式
為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
圖1為本發(fā)明實(shí)施例提供的擴(kuò)展接口調(diào)用方法的應(yīng)用場(chǎng)景示意圖。請(qǐng)參見圖1,在終端設(shè)備中安裝有瀏覽器101和功能實(shí)現(xiàn)模塊102。其中,終端設(shè)備可以為手機(jī)、電腦、電視等設(shè)備。功能實(shí)現(xiàn)模塊102位于非瀏覽器內(nèi)核中,可選的,功能實(shí)現(xiàn)模塊102可以為瀏覽器101的插件等。在瀏覽器101中可以運(yùn)行webapp101-1,瀏覽器101中設(shè)置有至少一個(gè)擴(kuò)展接口101-2和第一通信模塊101-3。功能實(shí)現(xiàn)模塊102中設(shè)置有至少一個(gè)擴(kuò)展接口實(shí)現(xiàn)模塊102-1和第二通信模塊102-2,擴(kuò)展接口實(shí)現(xiàn)模塊102-1用于實(shí)現(xiàn)擴(kuò)展接口101-2的功能。
在本申請(qǐng)中,瀏覽器101中的webapp101-1、擴(kuò)展接口101-2、及第一通信模塊101-3分別運(yùn)行在瀏覽器進(jìn)程中。功能實(shí)現(xiàn)模塊102中的擴(kuò)展接口實(shí)現(xiàn)模塊102-1和第二通信模塊102-2分別運(yùn)行在非瀏覽器進(jìn)程中。在實(shí)際應(yīng)用過程中,當(dāng)webapp需要展示擴(kuò)展接口對(duì)應(yīng)的功能時(shí),webapp在瀏覽器進(jìn)程中向擴(kuò)展接口發(fā)送調(diào)用指令,擴(kuò)展接口將調(diào)用指令轉(zhuǎn)換成用于通信的調(diào)用請(qǐng)求,并向第一通信模塊101-3發(fā)送調(diào)用請(qǐng)求,第一通信模塊101-3向功能實(shí)現(xiàn)模塊102中的第二通信模塊102-2發(fā)送調(diào)用請(qǐng)求,第二通信模塊102-2向?qū)?yīng)的擴(kuò)展接口實(shí)現(xiàn)模塊102-1發(fā)送調(diào)用請(qǐng)求。在擴(kuò)展接口實(shí)現(xiàn)模塊102-1確定得到調(diào)用結(jié)果之后,依次通過第二通信模塊102-2、第一通信模塊101-3、及擴(kuò)展接口101-2向webapp101-1發(fā)送調(diào)用結(jié)果,以使webapp101-1根據(jù)調(diào)用結(jié)果展示相應(yīng)的功能。
在本申請(qǐng)中,擴(kuò)展接口實(shí)現(xiàn)模塊102-1位于瀏覽器內(nèi)核之外,使得開發(fā)者無(wú)需根據(jù)瀏覽器的規(guī)定開發(fā)擴(kuò)展接口實(shí)現(xiàn)模塊102-1,只需在瀏覽器101中預(yù)留第一通信模塊101-3接口調(diào)用結(jié)果即可。這樣,針對(duì)不同類型的瀏覽器,開發(fā)者無(wú)需開發(fā)多種擴(kuò)展接口實(shí)現(xiàn)模塊,進(jìn)而降低webapp的開發(fā)成本,能夠改善對(duì)不同類型瀏覽器的通用性。
需要說(shuō)明的是,圖1只是以示例的形式示意本申請(qǐng)所示技術(shù)方案的一種應(yīng)用場(chǎng)景,并非對(duì)應(yīng)用場(chǎng)景的限定。例如,功能實(shí)現(xiàn)模塊102還可以設(shè)置在其它終端設(shè)備中,功能實(shí)現(xiàn)模塊102還可以設(shè)置在服務(wù)器上,本發(fā)明實(shí)施例對(duì)此不作具體限定。
下面,通過具體實(shí)施例,對(duì)本申請(qǐng)所示的技術(shù)方案進(jìn)行詳細(xì)說(shuō)明。需要說(shuō)明的是,下面幾個(gè)具體實(shí)施例可以相互結(jié)合,對(duì)于相同或相似的內(nèi)容,在不同的實(shí)施例中不再進(jìn)行贅述。
圖2為本發(fā)明實(shí)施例提供的擴(kuò)展接口調(diào)用方法的流程示意圖一。請(qǐng)參見圖2,該方法可以包括:
s201、獲取webapp在瀏覽器進(jìn)程中對(duì)擴(kuò)展接口進(jìn)行調(diào)用的調(diào)用指令。
本發(fā)明實(shí)施例的執(zhí)行主體可以為擴(kuò)展接口調(diào)用裝置,該擴(kuò)展接口調(diào)用裝置設(shè)置在終端設(shè)備中。可選的,擴(kuò)展接口調(diào)用裝置也可以設(shè)置在瀏覽器中。
本實(shí)施方式中的調(diào)用指令可以為進(jìn)程內(nèi)部的指令,無(wú)法在進(jìn)程之間進(jìn)行傳輸。在進(jìn)程內(nèi)部生成調(diào)用指令之后,進(jìn)程內(nèi)部涉及的其它模塊可以識(shí)別該調(diào)用指令,且可對(duì)該調(diào)用指令進(jìn)行處理。
需要說(shuō)明的是,在終端設(shè)備通過瀏覽器運(yùn)行webapp的過程中,只要對(duì)webapp對(duì)擴(kuò)展接口進(jìn)行了調(diào)用,均可以執(zhí)行圖2實(shí)施例所示的技術(shù)方案。
擴(kuò)展接口通常包括多個(gè)由javascript腳本語(yǔ)言編寫的js文件,每一個(gè)js文件可以提供一組jsapi,jsapi可以通過標(biāo)準(zhǔn)的js引擎接口注冊(cè)到瀏覽器中。
在實(shí)際應(yīng)用過程中,用戶在瀏覽器中使用webapp時(shí),創(chuàng)建瀏覽器進(jìn)程,并在瀏覽器進(jìn)程中運(yùn)行webapp。webapp通常包括多個(gè)頁(yè)面,webapp的部分頁(yè)面可包括一個(gè)或多個(gè)擴(kuò)展接口,當(dāng)瀏覽器加載webapp的某一頁(yè)面時(shí),若該頁(yè)面中包括擴(kuò)展接口,則瀏覽器會(huì)加載該擴(kuò)展接口對(duì)應(yīng)的文件(例如js文件等),以使webapp可以隨時(shí)對(duì)擴(kuò)展接口進(jìn)行調(diào)用。根據(jù)擴(kuò)展接口類型的不同,webapp對(duì)擴(kuò)展接口進(jìn)行調(diào)用的觸發(fā)條件也不同,例如,在webapp展示頁(yè)面時(shí),webapp可以自動(dòng)對(duì)擴(kuò)展接口進(jìn)行調(diào)用,也可以在webapp展示頁(yè)面之后,在用戶的觸發(fā)下對(duì)擴(kuò)展接口進(jìn)行調(diào)用。
例如,假設(shè)webapp的頁(yè)面1中包括擴(kuò)展接口1,擴(kuò)展接口1用于展示webapp的當(dāng)前頁(yè)面使用的語(yǔ)言。在瀏覽器加載webapp的頁(yè)面1時(shí),則加載擴(kuò)展接口1對(duì)應(yīng)的js文件,當(dāng)瀏覽器顯示頁(yè)面1時(shí),則調(diào)用接口1以獲取頁(yè)面1使用的語(yǔ)言,并在頁(yè)面1中顯示頁(yè)面1使用的語(yǔ)言。
例如,假設(shè)webapp的頁(yè)面2中包括擴(kuò)展接口2,擴(kuò)展接口2用于在接收到用戶的點(diǎn)擊操作之后實(shí)現(xiàn)關(guān)機(jī)。在瀏覽器加載webapp的頁(yè)面2時(shí),則加載擴(kuò)展接口2對(duì)應(yīng)的js文件,并顯示擴(kuò)展接口2對(duì)應(yīng)的關(guān)機(jī)按鈕,在用戶對(duì)關(guān)機(jī)按鈕進(jìn)行點(diǎn)擊操作之后,則調(diào)用擴(kuò)展接口2,以實(shí)現(xiàn)關(guān)機(jī)。
s202、根據(jù)調(diào)用指令,向擴(kuò)展接口對(duì)應(yīng)的擴(kuò)展接口實(shí)現(xiàn)模塊發(fā)送調(diào)用請(qǐng)求,以使擴(kuò)展接口實(shí)現(xiàn)模塊通過非瀏覽器進(jìn)程獲取調(diào)用請(qǐng)求對(duì)應(yīng)的調(diào)用結(jié)果,擴(kuò)展接口實(shí)現(xiàn)模塊位于瀏覽器的內(nèi)核之外。
本實(shí)施方式中的調(diào)用請(qǐng)求為可以在不同進(jìn)程之間、或者不同設(shè)備之間進(jìn)行傳輸?shù)恼?qǐng)求消息,例如,調(diào)用請(qǐng)求可以為基于websocket或http/socket通信方式的請(qǐng)求消息。
調(diào)用結(jié)果為擴(kuò)展接口實(shí)現(xiàn)模塊對(duì)擴(kuò)展接口的實(shí)現(xiàn)結(jié)果,例如,調(diào)用結(jié)果可以為擴(kuò)展接口實(shí)現(xiàn)模塊返回的文字、圖片、音視頻等,調(diào)用結(jié)果還可以為擴(kuò)展接口實(shí)現(xiàn)模塊執(zhí)行的動(dòng)作,例如,擴(kuò)展接口實(shí)現(xiàn)模塊對(duì)其它應(yīng)用程序的調(diào)用操作、對(duì)終端設(shè)備的關(guān)機(jī)操作等。當(dāng)然,調(diào)用結(jié)果還可以包括其它形式,本發(fā)明實(shí)施例對(duì)此不作具體限定。
在獲取到調(diào)用指令之后,可以生成調(diào)用指令對(duì)應(yīng)的調(diào)用請(qǐng)求,可選的,可以對(duì)調(diào)用指令進(jìn)行解析,并將解析后的調(diào)用指令封裝成可在不同進(jìn)程之間、或者不同設(shè)備之間進(jìn)行傳輸?shù)恼{(diào)用請(qǐng)求,例如消息形式的調(diào)用請(qǐng)求。
可選的,在調(diào)用指令中可以包括需要調(diào)用的擴(kuò)展接口的標(biāo)識(shí),相應(yīng)的,可以根據(jù)擴(kuò)展接口的標(biāo)識(shí)確定擴(kuò)展接口對(duì)應(yīng)的擴(kuò)展接口實(shí)現(xiàn)模塊,并向擴(kuò)展接口實(shí)現(xiàn)模塊發(fā)送調(diào)用請(qǐng)求。可選的,在瀏覽器中設(shè)置有用于和其它進(jìn)程或者其它設(shè)備通信的第一通信模塊,擴(kuò)展接口實(shí)現(xiàn)模塊所在的非瀏覽器進(jìn)程對(duì)應(yīng)有第二通信模塊,相應(yīng)的,可以通過瀏覽器進(jìn)程對(duì)應(yīng)的第一通信模塊向非瀏覽器進(jìn)程對(duì)應(yīng)的第二通信模塊發(fā)送調(diào)用請(qǐng)求,以使第二通信模塊向擴(kuò)展接口實(shí)現(xiàn)模塊發(fā)送調(diào)用請(qǐng)求。
在擴(kuò)展接口實(shí)現(xiàn)模塊接收到調(diào)用請(qǐng)求之后,由于擴(kuò)展接口實(shí)現(xiàn)模塊位于瀏覽器內(nèi)核之外,因此,擴(kuò)展接口可以通過非瀏覽器進(jìn)程獲取調(diào)用請(qǐng)求對(duì)應(yīng)的調(diào)用結(jié)果。
s203、接收擴(kuò)展接口實(shí)現(xiàn)模塊發(fā)送的調(diào)用結(jié)果,并通過瀏覽器進(jìn)程向webapp發(fā)送調(diào)用請(qǐng)求對(duì)應(yīng)的調(diào)用結(jié)果。
可選的,在擴(kuò)展接口實(shí)現(xiàn)模塊獲取得到調(diào)用請(qǐng)求對(duì)應(yīng)的調(diào)用結(jié)果之后,擴(kuò)展接口實(shí)現(xiàn)模塊可以通過第二通信模塊向?yàn)g覽器進(jìn)程對(duì)應(yīng)的第一通信模塊發(fā)送調(diào)用結(jié)果,以使第一通信模塊通過瀏覽器進(jìn)程向webapp發(fā)送調(diào)用請(qǐng)求對(duì)應(yīng)的調(diào)用結(jié)果。
在現(xiàn)有技術(shù)中,由于擴(kuò)展接口實(shí)現(xiàn)模塊運(yùn)行在瀏覽器進(jìn)程中,因此,當(dāng)擴(kuò)展接口實(shí)現(xiàn)模塊出現(xiàn)異常時(shí),會(huì)導(dǎo)致瀏覽器異常(崩潰、異常退出等)。而在本申請(qǐng)中,由于擴(kuò)展接口實(shí)現(xiàn)模塊位于瀏覽器內(nèi)核之外,當(dāng)擴(kuò)展接口實(shí)現(xiàn)模塊在獲取調(diào)用結(jié)果的過程中出現(xiàn)異常,僅會(huì)對(duì)webapp當(dāng)前顯示頁(yè)面對(duì)應(yīng)的擴(kuò)展接口的功能造成影響,并不會(huì)影響瀏覽器的正常運(yùn)行,進(jìn)而提高了瀏覽器運(yùn)行的可靠性。
本發(fā)明實(shí)施例提供的擴(kuò)展接口調(diào)用方法,擴(kuò)展接口位于瀏覽器內(nèi)核,擴(kuò)展接口實(shí)現(xiàn)模塊位于瀏覽器內(nèi)核之外,在瀏覽器進(jìn)程中運(yùn)行webapp的過程中,當(dāng)webapp對(duì)擴(kuò)展接口進(jìn)行調(diào)用之后,可以向非瀏覽器內(nèi)核中的擴(kuò)展接口實(shí)現(xiàn)模塊發(fā)送調(diào)用請(qǐng)求,以使擴(kuò)展接口實(shí)現(xiàn)模塊可以在非瀏覽器進(jìn)程中獲取調(diào)用請(qǐng)求對(duì)應(yīng)的調(diào)用結(jié)果,并將調(diào)用結(jié)果反饋給瀏覽器進(jìn)程中的webapp。在上述過程中,由于擴(kuò)展接口實(shí)現(xiàn)模塊位于瀏覽器內(nèi)核之外,使得開發(fā)者無(wú)需根據(jù)瀏覽器的規(guī)定開發(fā)擴(kuò)展接口實(shí)現(xiàn)模塊,針對(duì)所有類型的瀏覽器,均可以使用相同的擴(kuò)展接口實(shí)現(xiàn)模塊,進(jìn)而能夠降低webapp的開發(fā)成本。
在實(shí)際應(yīng)用過程中,webapp可能同時(shí)對(duì)多個(gè)擴(kuò)展接口進(jìn)行了調(diào)用,相應(yīng)的,webapp可能同時(shí)接收到多個(gè)擴(kuò)展接口對(duì)應(yīng)的調(diào)用結(jié)果,為了保證可以準(zhǔn)確的將調(diào)用結(jié)果和對(duì)擴(kuò)展接口的調(diào)用請(qǐng)求相關(guān)聯(lián),可以通過結(jié)果接收器接收調(diào)用結(jié)果。下面,在圖2所示實(shí)施例的基礎(chǔ)上,通過圖3所示的實(shí)施例,對(duì)該種實(shí)現(xiàn)方式進(jìn)行詳細(xì)說(shuō)明。
圖3為本發(fā)明實(shí)施例提供的擴(kuò)展接口調(diào)用方法的流程示意圖二。在圖2所示實(shí)施例的基礎(chǔ)上,請(qǐng)參見圖3,該方法可以包括:
s301、獲取webapp在瀏覽器進(jìn)程中對(duì)擴(kuò)展接口進(jìn)行調(diào)用的調(diào)用指令。
需要說(shuō)明的是,s301的執(zhí)行過程可以參見圖2所示實(shí)施例中的s201,此處不再進(jìn)行贅述。
s302、生成調(diào)用指令對(duì)應(yīng)的調(diào)用請(qǐng)求,并通過瀏覽器進(jìn)程對(duì)應(yīng)的第一通信模塊向非瀏覽器進(jìn)程對(duì)應(yīng)的第二通信模塊發(fā)送調(diào)用請(qǐng)求,以使第二通信模塊向擴(kuò)展接口實(shí)現(xiàn)模塊發(fā)送調(diào)用請(qǐng)求。
需要說(shuō)明的是,s302的執(zhí)行過程可以參見圖2所示實(shí)施例中的s202,此處不再進(jìn)行贅述。
s303、生成調(diào)用請(qǐng)求的會(huì)話標(biāo)識(shí)。
在本發(fā)明實(shí)施例中,擴(kuò)展接口和擴(kuò)展接口實(shí)現(xiàn)模塊具有一一對(duì)應(yīng)關(guān)系,不同的擴(kuò)展接口對(duì)應(yīng)的調(diào)用請(qǐng)求不同,在webapp運(yùn)行的過程中,若對(duì)同一擴(kuò)展接口進(jìn)行了多次調(diào)用,則該多次調(diào)用對(duì)應(yīng)的調(diào)用請(qǐng)求也不同,每一個(gè)調(diào)用請(qǐng)求對(duì)應(yīng)唯一的一個(gè)會(huì)話標(biāo)識(shí)。
s304、生成調(diào)用請(qǐng)求對(duì)應(yīng)的結(jié)果接收器,并確定結(jié)果接收器與調(diào)用請(qǐng)求的會(huì)話標(biāo)識(shí)的對(duì)應(yīng)關(guān)系。
可選的,結(jié)果接收器可以為對(duì)預(yù)設(shè)函數(shù)的實(shí)現(xiàn),例如,預(yù)設(shè)函數(shù)可以為resultcallback。
在本發(fā)明實(shí)施例中,每一個(gè)調(diào)用請(qǐng)求對(duì)應(yīng)唯一的一個(gè)結(jié)果接收器。結(jié)果接收器用于接收對(duì)應(yīng)的調(diào)用結(jié)果,并將調(diào)用結(jié)果轉(zhuǎn)發(fā)給webapp。可選的,結(jié)果接收器可以用于指示該調(diào)用請(qǐng)求對(duì)應(yīng)的調(diào)用結(jié)果使用(例如顯示等)的位置、方式等。
s305、通過第一通信接口接收接口擴(kuò)展接口實(shí)現(xiàn)模塊通過第二通信接口發(fā)送的調(diào)用結(jié)果。
需要說(shuō)明的是,s305的執(zhí)行過程可以參見圖2所示實(shí)施例中的s203,此處不再進(jìn)行贅述。
s306、獲取調(diào)用結(jié)果的會(huì)話標(biāo)識(shí),調(diào)用結(jié)果的會(huì)話標(biāo)識(shí)與調(diào)用請(qǐng)求的會(huì)話標(biāo)識(shí)相同。
在本發(fā)明實(shí)施例中,每一個(gè)調(diào)用請(qǐng)求對(duì)應(yīng)一個(gè)調(diào)用結(jié)果,且調(diào)用結(jié)果的會(huì)話標(biāo)識(shí)與其對(duì)應(yīng)的調(diào)用請(qǐng)求的會(huì)話標(biāo)識(shí)相同。相應(yīng)的,在生成調(diào)用結(jié)果時(shí),可以根據(jù)調(diào)用請(qǐng)求的會(huì)話標(biāo)識(shí),確定調(diào)用結(jié)果的會(huì)話標(biāo)識(shí)。
例如,擴(kuò)展接口、調(diào)用請(qǐng)求、調(diào)用結(jié)果、結(jié)果接收器、和會(huì)話標(biāo)識(shí)的對(duì)應(yīng)關(guān)系可以如表1所示:
表1
s307、根據(jù)調(diào)用結(jié)果的會(huì)話標(biāo)識(shí)和預(yù)設(shè)對(duì)應(yīng)關(guān)系,確定調(diào)用結(jié)果對(duì)應(yīng)的結(jié)果接收器,預(yù)設(shè)對(duì)應(yīng)關(guān)系中包括多個(gè)會(huì)話標(biāo)識(shí)及各會(huì)話標(biāo)識(shí)對(duì)應(yīng)的結(jié)果接收器。
可選的,預(yù)設(shè)對(duì)應(yīng)關(guān)系可以如s306中的表1所示,此處不再進(jìn)行贅述。
s308、向調(diào)用結(jié)果對(duì)應(yīng)的結(jié)果接收器發(fā)送調(diào)用結(jié)果,以使調(diào)用結(jié)果對(duì)應(yīng)的結(jié)果接收器向webapp發(fā)送調(diào)用結(jié)果。
在結(jié)果接收器接收到調(diào)用結(jié)果之后,結(jié)果接收器向webapp發(fā)送調(diào)用結(jié)果,在webapp可以根據(jù)向其發(fā)送調(diào)用結(jié)果的結(jié)果接收器,確定對(duì)該調(diào)用結(jié)果的使用位置及使用方式等,并根據(jù)對(duì)調(diào)用結(jié)果的使用位置及顯示方式,使用調(diào)用結(jié)果。
下面,通過具體示例,對(duì)上述實(shí)施例所示的方法進(jìn)行詳細(xì)說(shuō)明。
示例性的,假設(shè)webapp的頁(yè)面1中包括擴(kuò)展接口1,擴(kuò)展接口1用于獲取系統(tǒng)當(dāng)前使用的語(yǔ)言,并在頁(yè)面1中展示系統(tǒng)當(dāng)前使用的語(yǔ)言。
假設(shè)擴(kuò)展接口1的接口函數(shù)為getsystemlanguage(resultcallback),其中,getsystemlanguage為接口函數(shù)的名稱,resultcallback為用來(lái)返回結(jié)果的回調(diào)函數(shù)的名稱。
當(dāng)用戶需要使用webapp時(shí),用戶在瀏覽器中輸入webapp的地址,并在瀏覽器進(jìn)程中運(yùn)行webapp,當(dāng)webapp加載頁(yè)面1時(shí),通過標(biāo)準(zhǔn)的js功能在window下增加getsystemlanguage方法,以實(shí)現(xiàn)加載擴(kuò)展接口1。當(dāng)webapp顯示頁(yè)面1時(shí),webapp調(diào)用擴(kuò)展接口1,可選的,webapp可以通過如下函數(shù)調(diào)用方式實(shí)現(xiàn)調(diào)用擴(kuò)展接口1:
getsystemlanguage(function(lang){
alert(“systemlanguageis:”+lang);
});
根據(jù)webapp對(duì)擴(kuò)展接口1的調(diào)用指令,在getsystemlanguage對(duì)應(yīng)的函數(shù)體內(nèi)封裝出jsapi命令(調(diào)用請(qǐng)求),此處以調(diào)用請(qǐng)求為json格式為例,調(diào)用請(qǐng)求可以如下:
varcmd={
commandname:“getsystemlanguage”,
sessionid:”12345678-1234-1234-1234-123456789012”,
}
該調(diào)用請(qǐng)求的會(huì)話標(biāo)識(shí)為12345678-1234-1234-1234-123456789012,將resultcallback作為該調(diào)用請(qǐng)求對(duì)應(yīng)的結(jié)果接收器,并將resultcallback和會(huì)話標(biāo)識(shí)“12345678-1234-1234-1234-123456789012”關(guān)聯(lián),以便通過該會(huì)話標(biāo)識(shí)可以找到唯一的結(jié)果接收器resultcallback。
在瀏覽器進(jìn)程中,將json格式的jsapi命令(調(diào)用請(qǐng)求)發(fā)送給瀏覽器進(jìn)程對(duì)應(yīng)的第一通信模塊,第一通信模塊向非瀏覽器進(jìn)程中的第二通信模塊發(fā)送調(diào)用請(qǐng)求,例如,可以通過如下方式發(fā)送調(diào)用請(qǐng)求:
sendcommand(target,cmd);
其中,target用來(lái)存放連接js擴(kuò)展服務(wù)端所需的參數(shù)等信息。需要說(shuō)明的是,發(fā)送調(diào)用請(qǐng)求的方式可以有多種,比如建立websocket連接進(jìn)行發(fā)送,或者通過xmlhttprequest建立連接并發(fā)送,當(dāng)然,也可以通過其它方式實(shí)現(xiàn)的js擴(kuò)展進(jìn)行通信等多種方式。例如,假設(shè)以websocket方式建立socket連接,則在socket建立好后即可以字符串形式發(fā)送json數(shù)據(jù)。
在第二通信模塊接收到調(diào)用請(qǐng)求之后,對(duì)調(diào)用請(qǐng)求進(jìn)行解析,得到可處理格式的信息,假設(shè)第二通信模塊可處理的格式為c++,則第二通信模塊可以解析得到如下對(duì)象:
class{
std::stringcommandname;
std::stringsessionid:
};
第二通信模塊將解析得到的對(duì)象發(fā)送給擴(kuò)展接口1對(duì)應(yīng)的擴(kuò)展接口實(shí)現(xiàn)模塊1,可選的,在發(fā)送調(diào)用請(qǐng)求時(shí),可以確定擴(kuò)展接口1對(duì)應(yīng)的擴(kuò)展接口實(shí)現(xiàn)模塊1,并在調(diào)用請(qǐng)求中攜帶擴(kuò)展接口實(shí)現(xiàn)模塊1的標(biāo)識(shí),以使第二通信模塊可以根據(jù)擴(kuò)展接口實(shí)現(xiàn)模塊1的標(biāo)識(shí),向擴(kuò)展接口實(shí)現(xiàn)模塊1發(fā)送調(diào)用請(qǐng)求。
擴(kuò)展接口實(shí)現(xiàn)模塊1根據(jù)調(diào)用請(qǐng)求,獲取頁(yè)面1當(dāng)前使用的語(yǔ)言,假設(shè)擴(kuò)展接口實(shí)現(xiàn)模塊1獲取得到系統(tǒng)當(dāng)前使用的語(yǔ)言為英語(yǔ),則擴(kuò)展接口實(shí)現(xiàn)模塊1生成如下調(diào)用結(jié)果:
{
commandname:”getsystemlanguage”,
sessionid:”12345678-1234-1234-1234-123456789012”,
result:”eng”
}
擴(kuò)展接口實(shí)現(xiàn)模塊1將上述調(diào)用結(jié)果發(fā)送給第二通信模塊,第二通信模塊將調(diào)用結(jié)果發(fā)送給瀏覽器進(jìn)程對(duì)應(yīng)的第一通信模塊,并由第一通信模塊發(fā)送給擴(kuò)展接口1,擴(kuò)展接口1根據(jù)會(huì)話標(biāo)識(shí)(sessionid)確定對(duì)應(yīng)的結(jié)果接收器resultcallback,并調(diào)用該結(jié)果接收器的方法,以實(shí)現(xiàn)將調(diào)用結(jié)果返還給webapp:
varresultinfo={
commandname:”getsystemlanguage”,
sessionid:”12345678-1234-1234-1234-123456789012”,
result:”eng”
}
varresultcallback=findcallbackbysessionid(resultinfo.sessionid);
resultcallback(resultinfo.result);
在webapp接收到調(diào)用結(jié)果之后,webapp中的callback被執(zhí)行,即alert(“systemlanguageis:”+lang)被執(zhí)行,并顯示出”systemlanguageis:eng”的結(jié)果。
圖4為本發(fā)明實(shí)施例提供的擴(kuò)展接口調(diào)用裝置的結(jié)構(gòu)示意圖一。請(qǐng)參見圖4,該裝置可以包括獲取模塊11、發(fā)送模塊12和接收模塊13,其中,
所述獲取模塊11用于,獲取所述webapp在瀏覽器進(jìn)程中對(duì)擴(kuò)展接口進(jìn)行調(diào)用的調(diào)用指令,所述調(diào)用指令為進(jìn)程內(nèi)部的指令;
所述發(fā)送模塊12用于,根據(jù)所述調(diào)用指令,向所述擴(kuò)展接口對(duì)應(yīng)的擴(kuò)展接口實(shí)現(xiàn)模塊發(fā)送所述調(diào)用指令對(duì)應(yīng)的調(diào)用請(qǐng)求,以使所述擴(kuò)展接口實(shí)現(xiàn)模塊通過非瀏覽器進(jìn)程獲取所述調(diào)用請(qǐng)求對(duì)應(yīng)的調(diào)用結(jié)果,所述擴(kuò)展接口實(shí)現(xiàn)模塊位于所述瀏覽器的內(nèi)核之外,所述調(diào)用請(qǐng)求為在不同進(jìn)程間傳輸?shù)恼?qǐng)求消息;
所述接收模塊13用于,接收所述擴(kuò)展接口實(shí)現(xiàn)模塊發(fā)送的調(diào)用結(jié)果,并通過所述瀏覽器進(jìn)程向所述webapp發(fā)送所述調(diào)用請(qǐng)求對(duì)應(yīng)的調(diào)用結(jié)果。
本發(fā)明實(shí)施例提供的擴(kuò)展接口調(diào)用裝置可以執(zhí)行上述方法實(shí)施例所示的技術(shù)方案,其實(shí)現(xiàn)原理以及有益效果類似,此處不再進(jìn)行贅述。
在一種實(shí)施方式中,所述發(fā)送模塊12向所述擴(kuò)展接口對(duì)應(yīng)的擴(kuò)展接口實(shí)現(xiàn)模塊發(fā)送調(diào)用請(qǐng)求,包括:
根據(jù)所述調(diào)用指令,生成所述調(diào)用指令對(duì)應(yīng)的調(diào)用請(qǐng)求;
通過所述瀏覽器進(jìn)程對(duì)應(yīng)的第一通信模塊向所述非瀏覽器進(jìn)程對(duì)應(yīng)的第二通信模塊發(fā)送所述調(diào)用請(qǐng)求,以使所述第二通信模塊向所述擴(kuò)展接口實(shí)現(xiàn)模塊發(fā)送所述調(diào)用請(qǐng)求。
在另一種實(shí)施方式中,所述接收模塊13接收所述擴(kuò)展接口實(shí)現(xiàn)模塊發(fā)送的調(diào)用結(jié)果,包括:
通過所述第一通信模塊接收所述擴(kuò)展接口實(shí)現(xiàn)模塊通過所述第二通信模塊發(fā)送的所述調(diào)用結(jié)果。
圖5為本發(fā)明實(shí)施例提供的擴(kuò)展接口調(diào)用裝置的結(jié)構(gòu)示意圖二。在圖4所示實(shí)施例的基礎(chǔ)上,請(qǐng)參見圖5,所述裝置還包括生成模塊14,其中,在所述發(fā)送模塊12向所述擴(kuò)展接口對(duì)應(yīng)的擴(kuò)展接口實(shí)現(xiàn)模塊發(fā)送調(diào)用請(qǐng)求之后,所述生成模塊14用于:
生成所述調(diào)用請(qǐng)求的會(huì)話標(biāo)識(shí);
生成所述調(diào)用請(qǐng)求對(duì)應(yīng)的結(jié)果接收器,并確定所述結(jié)果接收器與所述調(diào)用請(qǐng)求的會(huì)話標(biāo)識(shí)的對(duì)應(yīng)關(guān)系。
在另一種實(shí)施方式中,所述發(fā)送模塊12通過所述瀏覽器進(jìn)程向所述webapp發(fā)送所述調(diào)用請(qǐng)求對(duì)應(yīng)的調(diào)用結(jié)果,包括:
獲取所述調(diào)用結(jié)果的會(huì)話標(biāo)識(shí),所述調(diào)用結(jié)果的會(huì)話標(biāo)識(shí)與所述調(diào)用請(qǐng)求的會(huì)話標(biāo)識(shí)相同;
根據(jù)所述調(diào)用結(jié)果的會(huì)話標(biāo)識(shí)和預(yù)設(shè)對(duì)應(yīng)關(guān)系,確定所述調(diào)用結(jié)果對(duì)應(yīng)的結(jié)果接收器,所述預(yù)設(shè)對(duì)應(yīng)關(guān)系中包括多個(gè)會(huì)話標(biāo)識(shí)及各會(huì)話標(biāo)識(shí)對(duì)應(yīng)的結(jié)果接收器;
向所述調(diào)用結(jié)果對(duì)應(yīng)的結(jié)果接收器發(fā)送所述調(diào)用結(jié)果,以使所述調(diào)用結(jié)果對(duì)應(yīng)的結(jié)果接收器向所述webapp發(fā)送所述調(diào)用結(jié)果。
本發(fā)明實(shí)施例提供的擴(kuò)展接口調(diào)用裝置可以執(zhí)行上述方法實(shí)施例所示的技術(shù)方案,其實(shí)現(xiàn)原理以及有益效果類似,此處不再進(jìn)行贅述。
本領(lǐng)域普通技術(shù)人員可以理解:實(shí)現(xiàn)上述各方法實(shí)施例的全部或部分步驟可以通過程序指令相關(guān)的硬件來(lái)完成。前述的程序可以存儲(chǔ)于一計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中。該程序在執(zhí)行時(shí),執(zhí)行包括上述各方法實(shí)施例的步驟;而前述的存儲(chǔ)介質(zhì)包括:rom、ram、磁碟或者光盤等各種可以存儲(chǔ)程序代碼的介質(zhì)。
最后應(yīng)說(shuō)明的是:以上各實(shí)施例僅用以說(shuō)明本發(fā)明實(shí)施例的技術(shù)方案,而非對(duì)其限制;盡管參照前述各實(shí)施例對(duì)本發(fā)明實(shí)施例進(jìn)行了詳細(xì)的說(shuō)明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對(duì)前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對(duì)其中部分或者全部技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明實(shí)施例方案的范圍。