WKWebViewJavascriptBridge - 優雅的 iOS 與 JS 互動層框架(Swift)

Lision發表於2018-01-29

WKWebViewJavascriptBridge 簡介

WKWebViewJavascriptBridge - 優雅的 iOS 與 JS 互動層框架(Swift)

GitHub 專案地址:WKWebViewJavascriptBridge

WKWebViewJavascriptBridge 能為你做什麼?

你可以通過使用 WKWebViewJavascriptBridge 書寫幾行程式碼實現混合模組,而無需關心底層的 iOS 與 JS 訊息傳遞實現。

WKWebViewJavascriptBridge - 優雅的 iOS 與 JS 互動層框架(Swift)

為什麼要開源 WKWebViewJavascriptBridge

其實在閱讀 WebViewJavascriptBridge 原始碼時就發現其為了相容 Mac OS X 的 WebView 與 iOS 中的 UIWebView 和 WKWebView 三個元件而被迫沿用攔截 Request 的方式實現 iOS 與 JS 之間的訊息傳遞。

當時就在想目前所處的時間節點正式 WKWebView 的時代,應該針對 WKWebView 來獨立封裝一個 Bridge 層級的框架,但是由於種種原因(主要是懶,笑)一直沒有付諸實踐。

直到發現了 UIWebView 跨域訪問漏洞 之後,才下定決心寫 WKWebViewJavascriptBridge 框架。

至於為什麼要用 Swift 作為 WKWebViewJavascriptBridge 的實現語言?主要是因為 Swift 3.2 - 4.0 的遷徙變化已經比較小了,可以認為 Swift 逐步趨於穩定(好吧,我承認就是因為最近看 Swift 比較多,想提高自己的 Swift 水平)。

為什麼僅支援 WKWebView?

WKWebView 的優勢

眾所周知,WKWebView 比 UIWebView 載入網頁的速度更快,效率更高,且沒有太多的記憶體開銷

在當前時間節點,大多數 iOS App 都是基於 iOS 9.0+ 的,這是一個 WKWebView 的時代。

UIWebView 跨域訪問漏洞

iOS 平臺跨域訪問漏洞成因是由於 UIWebView 預設開啟了WebKitAllowUniversalAccessFromFileURLs 和 WebKitAllowFileAccessFromFileURLs 選項。

相比之下,WKWebView 預設 allowFileAccessFromFileURLs 和 allowUniversalAccessFromFileURLs 選項為 false。

關於更多 UIWebView 跨域訪問漏洞,點選 這裡 瞭解更多。

特性

  • Swift 的支援:Swift 3.2 ~ 4 的支援。
  • 高效能:訊息傳遞效能高於傳統實現方式(攔截 Requests)。
  • 高速:無需考慮 Alert Box 安全超時。
  • 輕量:框架除去自動生成的 .h 僅有 3 個檔案。
  • 非侵入性:無需改寫 webView 的繼承基類(這裡假設當前時間節點下大部分 iOS App 已經完成了從 UIWebView 到 WKWebView 的遷徙,反正早晚要做這件事不是嗎?)。

關於 WKWebViewJavascriptBridge 對於 Objective-C 的支援

關於 WKWebViewJavascriptBridge 對於 Objective-C 的支援,我有以下看法(適用於所有 Swift 框架):

  • 如果之前專案是 Objective-C 與 Swift 混編,那麼可以直接使用 WKWebViewJavascriptBridge。
  • 如果之前專案沒有與 Swift 混編且之後也沒有混編的計劃,那麼請聯絡我,我統計一下寫一個 Objective-C 版本的實現。

寫在最後

如果你已經看到這裡了,那麼無論如何還請進 專案頁面 看一下哈!

專案初期,歡迎 PR!


補充~ 我建了一個技術交流微信群,想在裡面認識更多的朋友!如果各位同學對文章有什麼疑問或者工作之中遇到一些小問題都可以在群裡找到我或者其他群友交流討論,期待你的加入喲~

WKWebViewJavascriptBridge - 優雅的 iOS 與 JS 互動層框架(Swift)

Emmmmm..由於微信群人數過百導致不可以掃碼入群,所以請掃描上面的二維碼關注公眾號進群。

相關文章