摘要:安全安全是很重要的,現(xiàn)在有些實(shí)現(xiàn)中使用了,而在之前,存在任意代碼執(zhí)行漏洞,這就會(huì)導(dǎo)致嚴(yán)重的安全問題。
什么是JS Bridge
在大多數(shù)APP開發(fā)過程中,都會(huì)通過H5來實(shí)現(xiàn)部分功能,而Hybird APP基本90%以上都是H5。現(xiàn)在很少有純?cè)腁PP。但是,由于H5頁面是內(nèi)嵌到原生應(yīng)用的WebView組件(一個(gè)瀏覽器內(nèi)核)中,而手機(jī)瀏覽器Javascript引擎是在一個(gè)沙箱環(huán)境中運(yùn)行,因此JavaScript的權(quán)限受到嚴(yán)格限制,比如沒有本地文件讀寫權(quán)限、不能使用GPS、不能修改系統(tǒng)配置等。所以,如果JavaScript要用到這些受限的能力時(shí),就需要委托原生去實(shí)現(xiàn),原生完成后,再將結(jié)果通知JavaScript,因此,JavaScript和原生之間就需要一個(gè)通信的橋梁,而這個(gè)橋梁本質(zhì)上就是原生的瀏覽器組件(我們統(tǒng)一稱之為WebView)與Javascript 通信的通道,一般稱為 WebView JavaScript Bridge, 為了簡(jiǎn)單,一般簡(jiǎn)稱為 JS bridge。需要說明的是,原生不僅僅指移動(dòng)端(Android、IOS)上原生代碼開發(fā)的部分,它也可以是Windows、MAC上的,所以原生一詞主要是為了區(qū)分H5,而本文只討論移動(dòng)端的Js Bridge 。
移動(dòng)開發(fā)的大勢(shì)今年來,動(dòng)態(tài)化是移動(dòng)開發(fā)的主流趨勢(shì),所謂動(dòng)態(tài)化是指可以隨時(shí)更新APP的能力,這是為了克服原生應(yīng)用修改后必須重新發(fā)版的天然不足。目前動(dòng)態(tài)化的技術(shù)主要有四種:熱補(bǔ)丁、混合開發(fā)框架(React-Native、Weex等)、純粹的Web APP、原生加H5(需要經(jīng)常更新的部分用H5實(shí)現(xiàn))。 其中熱補(bǔ)丁技術(shù)主要用于修復(fù)一些線上bug,不用于主流開發(fā),當(dāng)然也有一些基于熱補(bǔ)丁技術(shù)的分包動(dòng)態(tài)化方案,本文暫不討論。而剩余的三種方案,都是通過Javascript 和原生配合實(shí)現(xiàn)的,而它們都用到了 Js Bridge, 可見使用一個(gè)好的Js Bridge的重要性。而不同的混合開發(fā)框架、Web APP中Js Bridge的實(shí)現(xiàn)和通信協(xié)議都不相同,當(dāng)然,如果你使用的事這些開發(fā)框架,你只需要了解相應(yīng)框架下的通信協(xié)議就行,這沒有什么問題。 但是,對(duì)于采用原生加H5的APP,就需要自己挑選一個(gè)合適的Js Bridge了,那么對(duì)于開發(fā)者來說,什么是好的JavaScript Bridge?
什么是好的JS Bridge? 可用性能夠滿足通信需求、功能完善;當(dāng)然,如果都不能用,還是回家洗洗睡吧~。
健壯性所謂健壯就是經(jīng)得住考驗(yàn),bug少、兼容性好、在各種情況下都能穩(wěn)定運(yùn)行。然而,可怕的事,現(xiàn)有的知名開源js bridge 質(zhì)量都存在著嚴(yán)重問題,下面是我在兩個(gè)知名Android JS Bridge開源庫下提的問題:
https://github.com/lzyzsd/JsB...
https://github.com/jesse01/We...
可見,要想造一座好橋,還是不容易的。
跨平臺(tái)為了保證同一份Javascript代碼既能同時(shí)在Android和IOS下正常運(yùn)行,那么好的JavaScript Bridge 應(yīng)該要能跨平臺(tái),這樣才能保證在Android和IOS和H5通信協(xié)議一致。然而,目前Github上萬star的 marcuswestin/WebViewJavascriptBridge 官方也只提供了IOS版,盡管有一些第三方Android實(shí)現(xiàn),但大都存在各種各樣的問題,有的存在嚴(yán)重bug,如 https://github.com/jesse01/We... , 有的和IOS版差別太大,如 https://github.com/fangj/WebV... 。
安全安全是很重要的,現(xiàn)在有些Android實(shí)現(xiàn)中使用了 webview.addJavascriptInterface ,而在Android 4.2.2之前, webview.addJavascriptInterface 存在任意代碼執(zhí)行漏洞,這就會(huì)導(dǎo)致嚴(yán)重的安全問題。
使用簡(jiǎn)單一個(gè)好東西應(yīng)該是用起來簡(jiǎn)單的。
對(duì)于JS Bridge來說,使用簡(jiǎn)單應(yīng)該包括三個(gè)端:Android、IOS、 JavaScript, 也就是說無論對(duì)于哪個(gè)端,用起來要足夠的簡(jiǎn)單,這很重要,這樣可以避免大量的原生開發(fā)和前端開發(fā)的撕逼。
強(qiáng)大在滿足可用性和使用簡(jiǎn)單的基礎(chǔ)上,功能要盡可能強(qiáng)大。現(xiàn)在的很多實(shí)現(xiàn),基本上只滿足了可用性,而功能方面都比較弱,比如:
不支持檢測(cè)是否存在某個(gè)API的方法;有時(shí)隨著版本迭代不確定某個(gè)版本下是否存在某個(gè)Native或Javascript方法(在版本迭代過程中一些是新添加的)。
不支持進(jìn)度回調(diào);現(xiàn)有JS Bridge基本都只支持一次調(diào)用一次返回,但是有些時(shí)候,如js調(diào)用原生下載文件功能的方法時(shí),原生需要在下載過程中將下載進(jìn)度不停返回給js。
不支持API管理;現(xiàn)有JS Bridge注冊(cè)API時(shí)基本都是每個(gè)API都需要多帶帶注冊(cè),這樣在API多的情況下,不僅使用回非常麻煩,也不利于API分類管理。
福音我給大家捅破了現(xiàn)實(shí),也必須為大家重塑希望!聽不懂?那簡(jiǎn)單來說,就是前面都是鋪墊,下面才是真正目的!
那么到底有沒有一個(gè)可用、健壯、跨平臺(tái)、安全、使用簡(jiǎn)單、強(qiáng)大的現(xiàn)成的JS Bridge?
哈哈,當(dāng)然是有的, 經(jīng)過我通宵達(dá)旦、四處瀏覽、嘔心瀝血、廢寢忘食,終于創(chuàng)造了這么一個(gè)健壯、跨平臺(tái)、安全、使用簡(jiǎn)單、強(qiáng)大的JS Bridge,那就是DSBridge,它有如下特點(diǎn):
Android、IOS、Javascript 三端易用,輕量且強(qiáng)大、安全且健壯。
同時(shí)支持同步調(diào)用和異步調(diào)用
支持以類的方式集中統(tǒng)一管理API
支持API命名空間
支持調(diào)試模式
支持API存在性檢測(cè)
支持進(jìn)度回調(diào):一次調(diào)用,多次返回
支持Javascript關(guān)閉頁面事件回調(diào)
支持Javascript 模態(tài)/非模態(tài)對(duì)話框
支持騰訊X5內(nèi)核
當(dāng)然得給出源碼地址:
DSBridge for IOS:https://github.com/wendux/DSBridge-IOS
DSBridge for Android: https://github.com/wendux/DSBridge-Android
詳情請(qǐng)參考Github文檔,都有中文哦。
最后,如果你喜歡DSBridge, 歡迎star,不能多年辛苦無人知啊,哈哈。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/92977.html
electron-bridge github鏈接 求star Motivition 如果想一套代碼同時(shí)能跑在web環(huán)境和electron環(huán)境中,就需要在代碼中先判斷環(huán)境,再分別寫對(duì)應(yīng)的邏輯。每次寫到electron環(huán)境下的邏輯,又要區(qū)分渲染進(jìn)程和主進(jìn)程,因?yàn)橛行┦轮荒茕秩具M(jìn)程做,有些事只能主進(jìn)程做。所以,我希望能將這些抽象出來,某個(gè)方法,只能在electron環(huán)境下被調(diào)用,并且不需要關(guān)心在什么進(jìn)...
摘要:在實(shí)際項(xiàng)目之中,經(jīng)常會(huì)遇到之中嵌入網(wǎng)頁的情況,就需要網(wǎng)頁與原生之間交互,比如獲取當(dāng)前用戶信息等。一種簡(jiǎn)單的方式就是通過參數(shù)來搞定,但是這種方式異常死板,所以有了。本文章旨在記錄的實(shí)現(xiàn),如有錯(cuò)誤,還請(qǐng)指正如有需要了解原理,請(qǐng)。 在實(shí)際項(xiàng)目之中,經(jīng)常會(huì)遇到app之中嵌入網(wǎng)頁的情況(Hybrid),就需要web網(wǎng)頁與原生app之間交互,比如獲取當(dāng)前用戶信息等。一種簡(jiǎn)單的方式就是通過url參數(shù)...
摘要:在實(shí)際項(xiàng)目之中,經(jīng)常會(huì)遇到之中嵌入網(wǎng)頁的情況,就需要網(wǎng)頁與原生之間交互,比如獲取當(dāng)前用戶信息等。一種簡(jiǎn)單的方式就是通過參數(shù)來搞定,但是這種方式異常死板,所以有了。本文章旨在記錄的實(shí)現(xiàn),如有錯(cuò)誤,還請(qǐng)指正如有需要了解原理,請(qǐng)。 在實(shí)際項(xiàng)目之中,經(jīng)常會(huì)遇到app之中嵌入網(wǎng)頁的情況(Hybrid),就需要web網(wǎng)頁與原生app之間交互,比如獲取當(dāng)前用戶信息等。一種簡(jiǎn)單的方式就是通過url參數(shù)...
閱讀 3035·2023-04-25 20:09
閱讀 3318·2021-11-23 09:51
閱讀 1971·2021-11-22 15:25
閱讀 3348·2021-11-18 10:02
閱讀 2747·2021-09-27 13:56
閱讀 1304·2019-08-30 15:44
閱讀 1149·2019-08-30 13:21
閱讀 3322·2019-08-30 11:05