,在本發(fā)明實(shí)施例中,在終端中設(shè)置bridge模塊,bridge模塊包括Javascript封裝的組件和nat ive代碼,bridge模塊通過Javascript封裝的組件和nat ive代碼連接web層和native層,從而實(shí)現(xiàn)web層和native層之間的通信。
[0061]當(dāng)發(fā)送方想要向接收方發(fā)送處理消息時(shí),發(fā)送方向bridge模塊發(fā)送處理消息,bridge模塊接收發(fā)送方發(fā)送的處理消息。
[0062]該處理消息可以為請求消息,也可以為回復(fù)消息;如果在本步驟中發(fā)送方主動向接收方發(fā)送處理消息,該處理消息可以為請求消息,并且發(fā)送方在該處理消息中插入請求消息的消息類型;如果在本步驟中發(fā)送方是回復(fù)接收方之前發(fā)送的請求消息,該處理消息可以為回復(fù)消息,并且發(fā)送方在該處理消息中插入回復(fù)消息的消息類型。
[0063]發(fā)送方可以位于web層,也可以位于native層;也即發(fā)送方可以為web應(yīng)用程序,也可以為native應(yīng)用程序。
[0064]當(dāng)發(fā)送方位于web層時(shí),接收方位于native層;當(dāng)發(fā)送方位于native層時(shí),接收方位于web層。也即當(dāng)發(fā)送方為web應(yīng)用程序時(shí),接收方為native應(yīng)用程序;當(dāng)發(fā)送方為native應(yīng)用程序時(shí),接收方為web應(yīng)用程序。
[0065]進(jìn)一步地,如果該處理消息是回復(fù)消息,則進(jìn)一步確定該處理消息是否需要回調(diào)處理;如果該處理消息不需要回調(diào)處理,向接收方發(fā)送該處理消息,整個(gè)處理流程結(jié)束。
[0066]如果該處理消息需要回調(diào)處理,控制接收方獲取處理該處理消息的回調(diào)函數(shù),執(zhí)行該回調(diào)函數(shù)。
[0067]其中,控制接收方獲取處理該處理消息的回調(diào)函數(shù),執(zhí)行該回調(diào)函數(shù)的步驟可以為:
[0068]向接收方發(fā)送該處理消息,該處理消息包括處理該處理消息的回調(diào)函數(shù);接收方接收bridge模塊發(fā)送的該處理消息,并從該處理消息中獲取處理該處理函數(shù)的回調(diào)函數(shù),執(zhí)行該回調(diào)函數(shù),得到處理結(jié)果。
[0069]步驟102:如果該處理消息是請求消息,控制接收方處理該處理消息得到響應(yīng)消息,接收方位于web層和nat i ve層中除發(fā)送方之外的通信層。
[0070]本步驟可以通過以下第一種方式或者第二種方式實(shí)現(xiàn),如果發(fā)送方位于web層,接收方位于native層,本步驟可以通過以下第一種方式實(shí)現(xiàn);如果發(fā)送方位于native層,接收方位于web層,本步驟可以通過以下第二種方式實(shí)現(xiàn)。
[0071 ] 對于第一種實(shí)現(xiàn)方式,本步驟可以通過以下步驟(1)和(2)實(shí)現(xiàn),包括:
[0072](1):向接收方發(fā)送觸發(fā)消息;
[0073]由于Javascript不能直接調(diào)用nat ive,因此,web層不可以直接調(diào)用nat ive層,貝1Jbridge模塊不能直接調(diào)用native層的處理函數(shù),bridge模塊通過向接收方發(fā)送觸發(fā)消息,以觸發(fā)接收方處理該處理消息。
[0074]Bridge模塊存儲該處理消息,并向接收方發(fā)送觸發(fā)消息,該觸發(fā)消息包括該處理消息的消息標(biāo)識,且該觸發(fā)消息用于觸發(fā)接收方調(diào)用處理該處理消息的第一處理函數(shù),通過第一處理函數(shù)處理該處理消息,得到響應(yīng)消息。
[0075]進(jìn)一步地,接收方接收bridge模塊發(fā)送的該觸發(fā)消息,從該觸發(fā)消息中獲取該處理消息的消息標(biāo)識,根據(jù)該消息標(biāo)識獲取該處理消息,并獲取處理該處理消息的第一處理函數(shù),通過第一處理函數(shù)處理該處理消息,得到響應(yīng)消息;向bridge模塊發(fā)送該響應(yīng)消息。
[0076]消息標(biāo)識可以為bridge模塊中存儲該處理消息的存儲位置。
[0077](2):接收接收方發(fā)送的該響應(yīng)消息。
[0078]Bridge模塊接收接收方發(fā)送的該響應(yīng)消息,執(zhí)行步驟103。
[0079]對于第二種實(shí)現(xiàn)方式,本步驟可以通過以下步驟(A)和(B)實(shí)現(xiàn),包括:
[0080](A):根據(jù)該處理消息,調(diào)用接收方的處理該處理消息的第二處理函數(shù);
[0081 ] 由于nat ive可以直接調(diào)用Java script,因此nat ive層可以直接調(diào)用web層,則bridge模塊可以直接調(diào)用web層的處理函數(shù),本步驟可以為:
[0082 ] Br i dge模塊向接收方發(fā)送通知消息,該通知消息包括該處理消息;接收方接收bridge模塊發(fā)送的通知消息,從該通知消息中獲取該處理消息,從本地獲取處理該處理函數(shù)的第二處理函數(shù),向bridge模塊發(fā)送第二處理函數(shù);bridge模塊接收接收方發(fā)送的第二處理函數(shù)。
[0083](B):通過第二處理函數(shù)處理該處理消息,得到響應(yīng)消息。
[0084]進(jìn)一步地,確定該響應(yīng)消息是否需要回調(diào)處理;如果該響應(yīng)消息不需要回調(diào)處理,執(zhí)行步驟103;如果該響應(yīng)消息需要回調(diào)處理,在響應(yīng)消息中設(shè)置回調(diào)標(biāo)識和回調(diào)函數(shù),執(zhí)行步驟103。
[0085]步驟103:向發(fā)送方發(fā)送該響應(yīng)消息。
[0086]如果該處理函數(shù)需要回調(diào)處理,則本步驟可以為:
[0087]向發(fā)送方發(fā)送設(shè)置有回調(diào)標(biāo)識和回調(diào)函數(shù)的響應(yīng)函數(shù)。
[0088]進(jìn)一步地,發(fā)送方接收bridge模塊發(fā)送的該響應(yīng)消息,如果該響應(yīng)消息中有回調(diào)標(biāo)識,則根據(jù)該回調(diào)標(biāo)識,確定該響應(yīng)消息需要回調(diào)處理,從該響應(yīng)消息中獲取回調(diào)函數(shù),執(zhí)行該回調(diào)函數(shù)。
[0089]在本發(fā)明實(shí)施例中,通過bridge模塊連接web層和native層,bridge模塊接收發(fā)送方發(fā)送的處理消息,發(fā)送方位于web層或者nat i ve層;如果該處理消息是請求消息,控制接收方處理該處理消息得到響應(yīng)消息,接收方位于web層和nat ive層中除發(fā)送方之外的通信層,向發(fā)送方發(fā)送該響應(yīng)消息;由于通過bridge模塊實(shí)現(xiàn)web層和native層之間的通信,不需要在native層運(yùn)行web server且bridge模塊占用內(nèi)存較少,從而可以節(jié)省內(nèi)存,降低內(nèi)存等資源的消耗。
[0090]實(shí)施例2
[0091]本發(fā)明實(shí)施例提供了一種實(shí)現(xiàn)web層和native層通信的方法,該方法的執(zhí)行主體可以為bridge模塊,bridge模塊連接web層和native層,參見圖2,其中,該方法包括:
[0092]步驟201:接收發(fā)送方發(fā)送的處理消息。
[0093]由于終端中的web層和native層之間隔著瀏覽器,因此,web層和native層之間不可以直接通信,在本發(fā)明實(shí)施例中,在終端中設(shè)置bridge模塊,bridge模塊包括Javascript封裝的組件和nat ive代碼,bridge模塊通過Javascript封裝的組件和nat ive代碼連接web層和native層,從而實(shí)現(xiàn)web層和native層之間的通信。
[0094]Native代碼依賴于終端的操作系統(tǒng);如果終端的操作系統(tǒng)為Android(安卓),native代碼為以Java為開發(fā)語言的native代碼;如果終端的操作系統(tǒng)為10S( InternetOperating System,因特網(wǎng)操作系統(tǒng)),native代碼是以O(shè)b ject-C為開發(fā)語言的native代碼。
[0095]在終端中設(shè)置bridge模塊之后,web層與native層之間只需要與bridge模塊約定接口,通過其約定的接口,借助于bridge模塊實(shí)現(xiàn)web層和native層之間的通信。例如,web層與bridge之間約定的接口為第一接口,native層與bridge之間約定的接口為第二接口。
[0096]當(dāng)發(fā)送方想要向接收方發(fā)送處理消息時(shí),發(fā)送方通過第一接口向bridge模塊發(fā)送處理消息,br i dge模塊通過第一接口接收發(fā)送方發(fā)送的處理消息。
[0097]該處理消息可以為請求消息,也可以為回復(fù)消息;如果在本步驟中發(fā)送方主動向接收方發(fā)送處理消息,該處理消息可以為請求消息,并且發(fā)送方在該處理消息中插入請求消息的消息類型;如果在本步驟中發(fā)送方是回復(fù)接收方之前發(fā)送的請求消息,該處理消息可以為回復(fù)消息,并且發(fā)送方在該處理消息中插入回復(fù)消息的消息類型。
[0098]bridge模塊接收到發(fā)送方發(fā)送的處理消息之后,執(zhí)行步驟202,確定該處理消息是請求消息還是回復(fù)消息。
[0099]需要說明的是,發(fā)送方可以位于web層,也可以位于native層;也即發(fā)送方可以為web應(yīng)用程序,也可以為native應(yīng)用程序。
[0?00]當(dāng)發(fā)送方位于web層時(shí),接收方位于native層;當(dāng)發(fā)送方位于native層時(shí),接收方位于web層。也即當(dāng)發(fā)送方為web應(yīng)用程序時(shí),接收方為native應(yīng)用程序;當(dāng)發(fā)送方為native應(yīng)用程序時(shí),接收方為web應(yīng)用程序。