本技術(shù)涉及計(jì)算機(jī),尤其涉及一種原生應(yīng)用調(diào)用方法、系統(tǒng)、設(shè)備及存儲介質(zhì)。
背景技術(shù):
1、在當(dāng)代移動應(yīng)用開發(fā)領(lǐng)域,webview(網(wǎng)絡(luò)視圖)是移動操作系統(tǒng)提供的一種視圖組件,用于在應(yīng)用中嵌入網(wǎng)頁,即在原生應(yīng)用內(nèi)部展示網(wǎng)頁內(nèi)容,其中,原生應(yīng)用是指專門為特定的操作系統(tǒng)設(shè)計(jì)和開發(fā)的應(yīng)用程序,從而結(jié)合了互聯(lián)網(wǎng)的靈活性與原生應(yīng)用的性能優(yōu)勢,極大地豐富了應(yīng)用的功能性和用戶體驗(yàn)。盡管webview為混合應(yīng)用開發(fā)帶來了便利,但在促進(jìn)原生應(yīng)用與嵌入式網(wǎng)頁間深層次數(shù)據(jù)交互的能力上仍面臨挑戰(zhàn)。
2、在相關(guān)技術(shù)中,開發(fā)者通常通過java代碼控制webview的加載和交互,然而,這種交互方式存在一些局限性,尤其是在原生應(yīng)用與網(wǎng)頁之間的數(shù)據(jù)交互方面,比如:1、缺乏原生函數(shù)暴露,原生應(yīng)用中的函數(shù)無法直接暴露給網(wǎng)頁使用,限制了網(wǎng)頁的交互能力和原生應(yīng)用的功能擴(kuò)展;2、數(shù)據(jù)交互限制,原生應(yīng)用與網(wǎng)頁之間的數(shù)據(jù)通常只能通過webview.addjavascriptinterface()的方式,無法實(shí)現(xiàn)對原生函數(shù)調(diào)用時(shí)的接口回調(diào);3、交互安全問題,javascript代碼在網(wǎng)頁中執(zhí)行,可能引入安全風(fēng)險(xiǎn),攻擊者可以利用反射機(jī)制調(diào)用未注冊的其他任何java類,導(dǎo)致javascript能力的無限增強(qiáng)。
3、因此,如何在保持應(yīng)用性能的同時(shí),提升webview中網(wǎng)頁與原生應(yīng)用之間數(shù)據(jù)交互的靈活性與安全性,成為亟待解決的技術(shù)問題。
技術(shù)實(shí)現(xiàn)思路
1、為了對披露的實(shí)施例的一些方面有基本的理解,下面給出了簡單的概括。所述概括不是泛泛評述,也不是要確定關(guān)鍵/重要組成元素或描繪這些實(shí)施例的保護(hù)范圍,而是作為后面的詳細(xì)說明的序言。
2、鑒于以上所述現(xiàn)有技術(shù)的缺點(diǎn),本技術(shù)公開了一種原生應(yīng)用調(diào)用方法、系統(tǒng)、設(shè)備及存儲介質(zhì),用于解決現(xiàn)有技術(shù)中webview中網(wǎng)頁與原生應(yīng)用之間數(shù)據(jù)交互缺乏靈活性與安全性的技術(shù)問題。
3、第一方面,本技術(shù)提供了一種原生應(yīng)用調(diào)用方法,所述方法包括:預(yù)先創(chuàng)建nativefunctionforjs對象、webchromeclient對象與jscallnative對象,其中,所述nativefunctionforjs對象中包含原生應(yīng)用的函數(shù)信息;利用所述jscallnative對象,讀取所述nativefunctionforjs對象中的所述函數(shù)信息,并根據(jù)所述函數(shù)信息生成javascript代碼;通過網(wǎng)絡(luò)視圖將所述javascript代碼寫入網(wǎng)頁,以使所述網(wǎng)頁根據(jù)所述javascript代碼與所需調(diào)用的目標(biāo)原生應(yīng)用生成調(diào)用請求信息,其中,所述調(diào)用請求信息包括所述目標(biāo)原生應(yīng)用對應(yīng)的目標(biāo)函數(shù)名稱與參數(shù)值數(shù)組;利用所述webchromeclient對象,響應(yīng)所述調(diào)用請求信息,并根據(jù)所述參數(shù)值數(shù)組執(zhí)行所述目標(biāo)函數(shù)名稱對應(yīng)的目標(biāo)函數(shù),完成所述目標(biāo)原生應(yīng)用的調(diào)用。
4、于本技術(shù)一實(shí)施例中,所述利用所述jscallnative對象,讀取所述nativefunctionforjs對象中的所述函數(shù)信息,并根據(jù)所述函數(shù)信息生成javascript代碼,包括:調(diào)用所述jscallnative對象中的generatejscode方法,基于所述generatejscode方法反射解析所述nativefunctionforjs對象中的所述函數(shù)信息,其中,所述函數(shù)信息包括所述原生應(yīng)用的函數(shù)名稱與參數(shù)數(shù)組;將每一所述原生應(yīng)用的對應(yīng)的所述函數(shù)名稱與所述參數(shù)數(shù)組進(jìn)行關(guān)聯(lián)編寫,獲得所述javascript代碼。
5、于本技術(shù)一實(shí)施例中,所述利用所述webchromeclient對象,響應(yīng)所述調(diào)用請求信息,并根據(jù)所述參數(shù)值數(shù)組執(zhí)行所述目標(biāo)函數(shù)名稱對應(yīng)的目標(biāo)函數(shù),包括:預(yù)先創(chuàng)建webchromeclient對象,并配置所述webchromeclient對象中的onjsprompt方法;響應(yīng)于所述javascript代碼,激活所述onjsprompt方法;利用所述onjsprompt方法,調(diào)用所述jscallnative對象中的callnative方法,解析所述調(diào)用請求信息,獲得所述目標(biāo)函數(shù)名稱與所述參數(shù)值數(shù)組;基于所述目標(biāo)函數(shù)名稱反射調(diào)用所述nativefunctionforjs對象中對應(yīng)的目標(biāo)函數(shù),并根據(jù)所述參數(shù)值數(shù)組執(zhí)行所述目標(biāo)函數(shù)。
6、于本技術(shù)一實(shí)施例中,所述調(diào)用請求信息中還包括回調(diào)函數(shù)信息,所述回調(diào)函數(shù)信息包括回調(diào)函數(shù)名稱;所述完成所述目標(biāo)原生應(yīng)用的調(diào)用之后,還包括:創(chuàng)建callbackinjs對象,以及獲取所述回調(diào)函數(shù)名稱與所述目標(biāo)原生應(yīng)用的調(diào)用結(jié)果,其中,所述callbackinjs對象中配置有callback方法;調(diào)用所述callback方法,封裝所述回調(diào)函數(shù)名稱與所述調(diào)用結(jié)果,生成回調(diào)代碼;利用所述網(wǎng)絡(luò)視圖中的loadurl方法,執(zhí)行所述回調(diào)代碼,根據(jù)所述回調(diào)函數(shù)名稱調(diào)用javascript環(huán)境中對應(yīng)的回調(diào)函數(shù),以使所述網(wǎng)頁對所述調(diào)用結(jié)果進(jìn)行回調(diào)。
7、于本技術(shù)一實(shí)施例中,所述通過網(wǎng)絡(luò)視圖將所述javascript代碼寫入網(wǎng)頁之前,還包括:獲取網(wǎng)頁地址,并加載所述網(wǎng)頁地址對應(yīng)的網(wǎng)頁;配置所述webchromeclient對象的onprogresschanged方法,監(jiān)聽所述網(wǎng)頁的加載進(jìn)度;將所述加載進(jìn)度與預(yù)設(shè)的加載進(jìn)度閾值進(jìn)行比較;若所述加載進(jìn)度大于或等于所述加載進(jìn)度閾值,則調(diào)用所述網(wǎng)絡(luò)視圖中的loadurl方法進(jìn)行所述javascript代碼的寫入操作。
8、于本技術(shù)一實(shí)施例中,所述網(wǎng)頁根據(jù)所述javascript代碼與所需調(diào)用的目標(biāo)原生應(yīng)用生成調(diào)用請求信息,包括:響應(yīng)于原生應(yīng)用調(diào)用指令,調(diào)用javascript環(huán)境中的prompt方法,其中,所述原生應(yīng)用調(diào)用指令中攜帶有所述目標(biāo)原生應(yīng)用對應(yīng)的所述目標(biāo)函數(shù)名稱與參數(shù)值;基于所述prompt方法,根據(jù)所述目標(biāo)函數(shù)名稱從所述javascript代碼中匹配出對應(yīng)的所述目標(biāo)參數(shù)數(shù)組;封裝所述目標(biāo)函數(shù)名稱、所述目標(biāo)參數(shù)數(shù)組與所述參數(shù)值,生成所述調(diào)用請求信息。
9、于本技術(shù)一實(shí)施例中,所述封裝所述目標(biāo)函數(shù)名稱、所述目標(biāo)參數(shù)數(shù)組與所述參數(shù)值,生成所述調(diào)用請求信息,包括:根據(jù)所述參數(shù)值對所述目標(biāo)參數(shù)數(shù)組中每一參數(shù)進(jìn)行賦值,獲得所述參數(shù)值數(shù)組;構(gòu)建json對象,所述json對象包括函數(shù)名稱屬性與參數(shù)屬性;將所述目標(biāo)函數(shù)名稱寫入所述函數(shù)名稱屬性中,以及將所述參數(shù)值數(shù)組寫入所述參數(shù)屬性中,獲得json字符串作為所述調(diào)用請求信息。
10、第二方面,本技術(shù)提供了一種原生應(yīng)用調(diào)用系統(tǒng),所述系統(tǒng)包括:創(chuàng)建模塊,用于預(yù)先創(chuàng)建nativefunctionforjs對象、webchromeclient對象與jscallnative對象,其中,所述nativefunctionforjs對象中包含原生應(yīng)用的函數(shù)信息;編碼模塊,用于利用所述jscallnative對象,讀取所述nativefunctionforjs對象中的所述函數(shù)信息,并根據(jù)所述函數(shù)信息生成javascript代碼;寫入模塊,用于通過網(wǎng)絡(luò)視圖將所述javascript代碼寫入網(wǎng)頁,以使所述網(wǎng)頁根據(jù)所述javascript代碼與所需調(diào)用的目標(biāo)原生應(yīng)用生成調(diào)用請求信息,其中,所述調(diào)用請求信息包括所述目標(biāo)原生應(yīng)用對應(yīng)的目標(biāo)函數(shù)名稱與參數(shù)值數(shù)組;調(diào)用模塊,用于利用所述webchromeclient對象,響應(yīng)所述調(diào)用請求信息,并根據(jù)所述參數(shù)值數(shù)組執(zhí)行所述目標(biāo)函數(shù)名稱對應(yīng)的目標(biāo)函數(shù),完成所述目標(biāo)原生應(yīng)用的調(diào)用。
11、第三方面,本技術(shù)提供了一種電子設(shè)備,包括:一個(gè)或多個(gè)處理器;存儲裝置,用于存儲一個(gè)或多個(gè)程序,當(dāng)一個(gè)或多個(gè)程序被一個(gè)或多個(gè)處理器執(zhí)行時(shí),使得電子設(shè)備實(shí)現(xiàn)第一方面描述的原生應(yīng)用調(diào)用方法。
12、第四方面,本技術(shù)提供了一種計(jì)算機(jī)可讀存儲介質(zhì),其上存儲有計(jì)算機(jī)程序,當(dāng)計(jì)算機(jī)程序被計(jì)算機(jī)的處理器執(zhí)行時(shí),使計(jì)算機(jī)執(zhí)行第一方面描述的原生應(yīng)用調(diào)用方法。
13、如上所述,本技術(shù)實(shí)施例提供的一種原生應(yīng)用調(diào)用方法、系統(tǒng)、設(shè)備及存儲介質(zhì),具有以下有益效果:
14、首先通過在nativefunctionforjs對象中,定義需要暴露給網(wǎng)頁的原生應(yīng)用的函數(shù)信息,然后利用jscallnative對象,根據(jù)nativefunctionforjs對象中的函數(shù)信息生成javascript代碼,進(jìn)一步通過網(wǎng)絡(luò)視圖將javascript代碼寫入網(wǎng)頁,使得網(wǎng)頁可以根據(jù)javascript代碼與所需調(diào)用的目標(biāo)原生應(yīng)用生成調(diào)用請求信息,在調(diào)用請求信息中,包括目標(biāo)函數(shù)名稱與參數(shù)值數(shù),最后利用webchromeclient對象,根據(jù)參數(shù)值數(shù)組執(zhí)行目標(biāo)函數(shù)名稱對應(yīng)的目標(biāo)函數(shù),完成原生調(diào)用,以將原生應(yīng)用的函數(shù)信息生成javascript代碼并注入網(wǎng)頁的方式,使得網(wǎng)頁可以基于javascript代碼進(jìn)行原生應(yīng)用的調(diào)用,避免了對網(wǎng)頁的交互能力和原生應(yīng)用的功能擴(kuò)展的限制,在通過webview實(shí)現(xiàn)網(wǎng)頁與原生應(yīng)用數(shù)據(jù)交互中,既提高了原生應(yīng)用調(diào)用的靈活性,又提高了原生應(yīng)用調(diào)用的安全性。
15、應(yīng)當(dāng)理解的是,以上的一般描述和后文的細(xì)節(jié)描述僅是示例性和解釋性的,并不能限制本技術(shù)。