記一則iOS封裝SDK的開發過程之WebView與JS的互動
問題 :不顯式顯示或載入WebView,內部部分內容好像執行不及時。
近來接觸了一個封裝sdk的專案,過程中遇到了一些問題,現在空了下來,將這個過程記錄一下。
專案主要由<u>iOS封裝一個framework靜態庫,庫裡面引入由甲方提供的js方法庫(一個js檔案),原生呼叫js中的方法,將方法返回值通過原生方法回撥會去</u>。相當於一箇中介軟體的功能。
我首先想到的是通過 UIWebView 或 WKWebView 來載入js,然後通過javascriptCore和WKWebView自帶的方法來處理。這個甲方要求又不要顯示html頁面,所以使用WebView有點用了牛刀的感覺。查了查資料,沒有找到直接能和js檔案互動的方法,無奈還是採用了WKWebView。
由於wkwebView是iOS8以後推出的新框架,故而一開始就使用使用了wkwebview。當對應的html、js到位後,發現js中的回撥很奇怪,原生偶爾可以得到回撥,猜測可能js方法庫中方法太過繁忙,從而導致訊息堵塞進而丟失掉。經過延時的操作,發現並不是這個問題。
正如之前說的,專案並不需要展示webView,html中的內容也不需要展示。而需求是提供.framework,不可能標頭檔案提供一個webView給開發者,新增到對應的介面上吧。因此做了一個小嚐試,快速改換成了UIWebView,相應的js方法,和呼叫方法,以及回撥方法改了下來測試。發現可以正常使用。這下得出結論WkWebView如果沒有正常顯示的話,內部有種“惰性”的感覺,某些js方法執行和回撥很“遲緩”,往往點幾次才會響應。
研究到這,應該是換成UIWebView了。但是抱著不甘心,多查了些資料,和試驗了幾波,是真的因為那個原因嗎?不多說了,總結了下我的兩個解決方法:
最終解決
1.使用UIWebView
js中使用下面的程式碼回撥原生
bclMiddlecallback(callbackScheme, callbackPath);
UIWebView可以不加在任何View上,也可以設定.hidden = YES;
2.繼續使用WKWebView
js中使用下面的方法回撥原生
window.webkit.messageHandlers.bclMiddlecallback.postMessage(callbackScheme + callbackPath);
!!!WKWebView必須加在某個View上,內部一些機制才能正常運轉、回撥才能正常發生。.hidden設定或者不設定不影響。
所以:
WKWebView *wkWebView = [[WKWebView alloc] initWithFrame:CGRectMake(0, [[UIScreen mainScreen] bounds].size.height, 320, 480) configuration:configuration];
_wkWebView = wkWebView;
[[[UIApplication sharedApplication] windows].firstObject addSubview:wkWebView];
wkWebView.hidden = YES;
收工!
如果你也遇到此問題,如果你有新的想法請聯絡我:dongigndao@163.com
相關文章
- webview與JS的互動WebViewJS
- WKWebView和WebView與JS的互動方式WebViewJS
- Android 與WebView中的js程式碼的互動記錄AndroidWebViewJS
- WebView與JS的互動,以及注意事項WebViewJS
- Android webview 與 js(Vue) 互動AndroidWebViewJSVue
- iOS 與 JS 互動開發知識總結iOSJS
- iOS開發:網頁JS與OC互動(JavaScriptCore)iOS網頁JSJavaScript
- JockeyJS——優秀的WebView與JS互動開源庫使用和解析JSWebView
- Android混合開發之WebView與Javascript互動AndroidWebViewJavaScript
- Flutter使用JsBridge與WebView互動FlutterJSWebView
- Flutter WebView與JS互動簡易指南FlutterWebViewJS
- WebView與APP互動實戰記錄WebViewAPP
- 深度學習js與安卓的互動以及WebView的那些坑深度學習JS安卓WebView
- Android webview JS 互動AndroidWebViewJS
- Cordova-iOS SDK封裝iOS封裝
- iOS BLE 開發小記[5] 與 Remote Peripheral 互動的最佳實踐iOSREM
- WebView和js的互調WebViewJS
- WebView深度學習(一)之WebView的基本使用以及Android和js的互動WebView深度學習AndroidJS
- Android:是時候掌握WebView與Js的互動技術了AndroidWebViewJS
- 前端開發 通用JS工具的封裝前端JS封裝
- iOS開發-javaScript互動iOSJavaScript
- iOS 與 JS 互動手冊 - JavaScriptCoreiOSJSJavaScript
- iOS 與JS Html常見互動iOSJSHTML
- iOS高階-WebView & JavaScript互動(附DEMO)iOSWebViewJavaScript
- iOS開發之WebViewiOSWebView
- 記一次封裝Axios的經歷封裝iOS
- 開發時候常用的js方法封裝JS封裝
- flutter webView 使用以及與 js 互操作FlutterWebViewJS
- Android與WebView資料互動AndroidWebView
- Android 原生 WebView 與 JavaScript 互動AndroidWebViewJavaScript
- ReactNative與iOS的互動ReactiOS
- 最全面總結 Android WebView與 JS 的互動方式(含例項Demo)AndroidWebViewJS
- Android WebView:這是一份 詳細 & 易懂的WebView學習攻略(含與JS互動、快取構建等)AndroidWebViewJS快取
- iOS開發之自定義表情鍵盤(元件封裝與自動佈局)iOS元件封裝
- WKWebViewJavascriptBridge - 優雅的 iOS 與 JS 互動層框架(Swift)WebViewJavaScriptiOSJS框架Swift
- iosUIWebView與js的簡單互動swift3版iOSUIWebViewJSSwift
- oc 與js 的原生互動JS
- iOS與JS互動之UIWebView-JavaScriptCore框架iOSJSUIWebViewJavaScript框架