WebViewJavascriptBridge詳細使用

前言

WebViewJavascriptBridge是支持到iOS6以前的版本的,用於支持native的iOS與javascript交互。若是須要支持到iOS6以前的app,使用它是很不錯的。本篇講講WebViewJavascriptBridge的基本原理及詳細講講如何去使用,包括iOS端的使用和JS端的使用。javascript

通過多番百度、Google,發現WebViewJavascriptBridge的資源講解不是翻譯官方文檔就是直接說官方提供的demo。可是筆者在寫這個demo時也遇到了很多問題,也想看看你們是怎麼使用的,特別是JS端,弄了很久都沒有回調,原來是由於log。css

寫下本篇文章,但願你們少走彎路吧!html

本Demo效果圖

image

iOS與H5交互的方案

縱觀全部iOS與H5交互的方案,有如下幾種:java

  • 第一種:有不少的app直接使用在webview的代理中經過攔截的方式與native進行交互,一般是經過攔截url scheme判斷是不是咱們須要攔截處理的url及其所對應的要處理的功能是什麼。任意版本都支持。
  • 第二種:iOS7以後出了JavaScriptCore.framework用於與JS交互,可是不支持iOS6,對於還須要支持iOS6的app,就不能考慮這個了。若須要瞭解,看最後的推薦閱讀。
  • 第三種:WebViewJavascriptBridge開源庫使用,本質上,它也是經過webview的代理攔截scheme,而後注入相應的JS。
  • 第四種:react-native,這個沒玩過(與前三種不一樣)。

本篇文章專講講WebViewJavascriptBridge。react

 

WebViewJavascriptBridge的基本原理

咱們看看WebViewJavascriptBridge.m中Webview代理攔截的代碼:ios

在攔截後,經過先經過-isBridgeLoadedURL:方法判斷URL是不是須要bridge的URL,如果,則經過injectJavascriptFile方法注入JS;不然判斷URL是不是隊列消息,如果,則執行查詢命令JS並刷新消息隊列;最後,URL被識別爲未知的消息。git

JS端如何使用

下面是本demo的HTML完整代碼:github

在JS端,嵌入步驟是:web

  • 第一步:將下面的代碼放在JS中:

這段代碼是固定的,必需要放到js中。json

  • 第二步:在下面的方法體裏寫相關JS代碼:

JS如何調用iOS代碼

經過bridge.callHandler來調用:

其中,各參數說明以下:

JS端加入WebViewJavascriptBridge代碼注意事項

若是在下面的函數體內有任何錯誤,都不會有打印日誌,也不會有任何回調:

所以,若是遇到什麼也沒有輸出,說明你寫錯了。另外,上面有demo中,log函數是自定義的,不是系統的,所以若是沒有加入這個函數的定義,調用它也會致使不能交互。

iOS端如何使用

  • 第一步:開啓日誌
  • 第二步:給ObjC與JS創建橋樑
  • 第三步:註冊HandleName,用於給JS端調用iOS端
  • 第四步:直接調用JS端註冊的HandleName

源代碼

你們能夠到GITHUB下載源代碼,喜歡就隨手給個Star:WebViewJavascriptBridgeDemo

最後

因爲不少朋友不太會使用這個庫,再加上羣裏的小夥伴們常常問這個問題,所以決定寫一篇文章來教你們如何去使用。其實在此以前,筆者也沒有使用過這個東西。

使用這個庫有什麼缺點?最明顯的就是要固定加入相關代碼,並且JS代碼要放在固定的函數內添加。那麼安卓端是否也支持這樣呢?若是不支持,那麼H5端要分別判斷ios、安卓?因爲沒有在公司使用過,所以只能帶着這些疑問,到底是否通用。

若是你們在公司使用過,那麼必定了解安卓是否兼容。還請你們給筆者在評論中說說!謝謝!

推薦閱讀

相關文章
相關標籤/搜索