WebViewJavascriptBridge詳細使用 iOS與H5交互的方案


WebViewJavascriptBridge詳細使用

源網址: https://www.cnblogs.com/jiang-xiao-yan/p/5345755.html   

前言

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

經過多番百度、Google,發現WebViewJavascriptBridge的資源講解不是翻譯官方文檔就是直接說官方提供的demo。但是筆者在寫這個demo時也遇到了不少問題,也想看看大家是怎么使用的,特別是JS端,弄了好久都沒有回調,原來是因為log。

寫下本篇文章,希望大家少走彎路吧!

本Demo效果圖

image

iOS與H5交互的方案

縱觀所有iOS與H5交互的方案,有以下幾種:

  • 第一種:有很多的app直接使用在webview的代理中通過攔截的方式與native進行交互,通常是通過攔截url scheme判斷是否是我們需要攔截處理的url及其所對應的要處理的功能是什么。任意版本都支持。
  • 第二種:iOS7之后出了JavaScriptCore.framework用於與JS交互,但是不支持iOS6,對於還需要支持iOS6的app,就不能考慮這個了。若需要了解,看最后的推薦閱讀。
  • 第三種:WebViewJavascriptBridge開源庫使用,本質上,它也是通過webview的代理攔截scheme,然后注入相應的JS。
  • 第四種:react-native,這個沒玩過(與前三種不同)。

本篇文章專講講WebViewJavascriptBridge。

 

WebViewJavascriptBridge的基本原理

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

在攔截后,通過先通過-isBridgeLoadedURL:方法判斷URL是否是需要bridge的URL,若是,則通過injectJavascriptFile方法注入JS;否則判斷URL是否是隊列消息,若是,則執行查詢命令JS並刷新消息隊列;最后,URL被識別為未知的消息。

JS端如何使用

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

在JS端,嵌入步驟是:

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

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

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

JS如何調用iOS代碼

通過bridge.callHandler來調用:

其中,各參數說明如下:

JS端加入WebViewJavascriptBridge代碼注意事項

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

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

iOS端如何使用

  • 第一步:開啟日志
  • 第二步:給ObjC與JS建立橋梁
  • 第三步:注冊HandleName,用於給JS端調用iOS端
  • 第四步:直接調用JS端注冊的HandleName

源代碼

大家可以到GITHUB下載源代碼,喜歡就隨手給個Star:WebViewJavascriptBridgeDemo

最后

由於很多朋友不太會使用這個庫,再加上群里的小伙伴們經常問這個問題,因此決定寫一篇文章來教大家如何去使用。其實在此之前,筆者也沒有使用過這個東西。

使用這個庫有什么缺點?最明顯的就是要固定加入相關代碼,而且JS代碼要放在固定的函數內添加。那么安卓端是否也支持這樣呢?如果不支持,那么H5端要分別判斷ios、安卓?由於沒有在公司使用過,因此只能帶着這些疑問,究竟是否通用。

如果大家在公司使用過,那么一定了解安卓是否兼容。還請大家給筆者在評論中說說!謝謝!

推薦閱讀

停下休息的時候不要忘記別人在奔跑!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM