WKWebViewJavascriptBridge - 優雅的 iOS 與 JS 交互層框架(Swift)git
GitHub 項目地址:WKWebViewJavascriptBridgegithub
你能夠經過使用 WKWebViewJavascriptBridge 書寫幾行代碼實現混合模塊,而無需關心底層的 iOS 與 JS 消息傳遞實現。web
其實在閱讀 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 比 UIWebView 加載網頁的速度更快,效率更高,且沒有太多的內存開銷。性能
在當前時間節點,大多數 iOS App 都是基於 iOS 9.0+ 的,這是一個 WKWebView 的時代。code
iOS 平臺跨域訪問漏洞成因是因爲 UIWebView 默認開啓了WebKitAllowUniversalAccessFromFileURLs 和 WebKitAllowFileAccessFromFileURLs 選項。cdn
相比之下,WKWebView 默認 allowFileAccessFromFileURLs 和 allowUniversalAccessFromFileURLs 選項爲 false。
關於更多 UIWebView 跨域訪問漏洞,點擊 這裏 瞭解更多。
.h
僅有 3 個文件。webView
的繼承基類(這裏假設當前時間節點下大部分 iOS App 已經完成了從 UIWebView 到 WKWebView 的遷徙,反正遲早要作這件事不是嗎?)。關於 WKWebViewJavascriptBridge 對於 Objective-C 的支持,我有如下見解(適用於全部 Swift 框架):
若是你已經看到這裏了,那麼不管如何還請進 項目頁面 看一下哈!
項目初期,歡迎 PR!
補充~ 我建了一個技術交流微信羣,想在裏面認識更多的朋友!若是各位同窗對文章有什麼疑問或者工做之中遇到一些小問題均可以在羣裏找到我或者其餘羣友交流討論,期待你的加入喲~
Emmmmm..因爲微信羣人數過百致使不能夠掃碼入羣,因此請掃描上面的二維碼關注公衆號進羣。