iOS 本地OC與JS互相調用并傳值

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的時候應該都沒問題的。

調試
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容