OC與JS間相互調用有兩種方式#####
第一種:使用JavaScriptCore,iOS7之后系統(tǒng)的原生方法,能夠實現一些比較復雜的參數互傳及參數返回。使用也比較簡單,有以下幾篇文章有比較詳細的介紹。基本看完就能夠熟練的使用了。
iOS js oc相互調用(JavaScriptCore)
Objective-C與JavaScript交互的那些事
關于iOS7里的JavaScriptCore framework
第二種就是使用攔截跳轉的方式。根據以下webview的代理函數可以攔截到跳轉鏈接,然后根據鏈接來解析使用一些本地的方法。返回NO不跳轉即可。但是一些互相之間的傳參就比較麻煩了。github上一個項目WebViewJavascriptBridge可以根據攔截跳轉來實現OC與JS之間的互相傳參。
- (BOOL)webView:(UIWebView)webView shouldStartLoadWithRequest:(NSURLRequest)request navigationType:(UIWebViewNavigationType)navigationType;
第三種就是使用WKWebview,這個是iOS8之后才能用的,它也有原生的方法能夠實現JS和OC的交互。下面這幾篇文章有介紹如何使用。
使用WKWebView替換UIWebView:
(iOS7下用UIWebView,iOS8后用WKWebView)
Using JavaScript with WKWebView in iOS 8
UIWebView和WKWebView的使用及js交互
WKWebView與Js實戰(zhàn)(OC版)
自己動手打造基于 WKWebView 的混合開發(fā)框架(二)——js 向 Native 一句話傳值并反射出 Swift 對象執(zhí)行指定函數
個人比較推薦第一種,第一種比較方便,而且適用于比較復雜的情況。我用第一種和第三種方式寫了一個例子來實現互相之間的調用傳參,有興趣的可以看看:DSOCConnectWithJS。
還有如果要在iOS7下使用UIWebView,iOS8后使用WKWebView,同時實現統(tǒng)一的JS和OC之間的交互。一種就是使用跳轉攔截的方式,一種就是給h5傳系統(tǒng)版本號,讓h5在iOS7的時候使用第一種的JS調用方式:xxxx.callbackHandler(''參數')。在iOS8之后使用第三種JS調用方式:
webkit.messageHandlers.callbackHandler.postMessage({"av":"jd"});
如果想讓使用者使用同一個api調用,就自己再寫一個js層轉接。
最后這里還有一個safari調試技巧,能夠在電腦safari中直接調試真機或模擬器的webview頁面的樣式。還能夠直接在safari的控制臺里直接輸入js方法進行調試。具體怎么使用看這篇文章使用safari對webview進行調試。我這里由于是工程里的css,js文件,所以它監(jiān)測不到,加載url的時候應該都沒問題的。
