WKWebView中OC與JS的交互

現(xiàn)在iOS項目中越來越多的使用到HTML,以更加方便、快捷的實現(xiàn)一些功能。當(dāng)然有了混合開發(fā),免不了需要OC與JS的交互,實現(xiàn)一些通訊。這個項目主要就是解決了WKWebView中OC與JS的交互,非常的方便、高效。

我采用了本地的Html文件,集成了掃一掃、分享、登錄、地圖選點、定位、支付等功能,不過分享,登錄,支付,定位等功能需要去申請相應(yīng)的開發(fā)者,得到參數(shù)補充到config.h文件中,就可以使用了??匆幌陆貓D:
Simulator Screen Shot - iPhone 8 - 2018-08-28 at 22.32.06.png

我們主要講WebViewJavascriptBridge的使用,先看看它的頭文件:

# 初始化bridge
+ (instancetype)bridgeForWebView:(WKWebView*)webView;
# 打開打印日志
+ (void)enableLogging;
# 向JS注冊方法,handlerName是OC中的方法名,handler是回調(diào)
- (void)registerHandler:(NSString*)handlerName handler:(WVJBHandler)handler;
# OC調(diào)用JS方法,handlerName是JS中的方法名
- (void)callHandler:(NSString*)handlerName;
# OC調(diào)用JS方法,handlerName是JS中的方法名,data是傳遞過去的參數(shù)
- (void)callHandler:(NSString*)handlerName data:(id)data;
# OC調(diào)用JS方法,handlerName是JS中的方法名,data是傳遞過去的參數(shù),responseCallback是JS處理的回調(diào)
- (void)callHandler:(NSString*)handlerName data:(id)data responseCallback:(WVJBResponseCallback)responseCallback;
# 重置消息隊列和響應(yīng)隊列
- (void)reset;
# 設(shè)置bridge的代理
- (void)setWebViewDelegate:(id<WKNavigationDelegate>)webViewDelegate;
- (void)disableJavscriptAlertBoxSafetyTimeout;

使用方法為:

1.初始化WKWebViewJavascriptBridge
self.webViewBridge = [WKWebViewJavascriptBridge bridgeForWebView:self.webView];
2.設(shè)置WKWebViewJavascriptBridge的代理
[self.webViewBridge setWebViewDelegate:self];
3.向JS注冊O(shè)C方法
[self registerNativeFunctions];
4.需要調(diào)用JS方法時
- (void)OCCallJS
{
    [self.webViewBridge callHandler:@"OCCallJS" data:nil responseCallback:^(id responseData) {
        NSLog(@"OC調(diào)用JS");
    }];
}

當(dāng)然還有最最重要的一點,這一段代碼必須要放在JS中,否則JS無法調(diào)用OC方法:

/*這段代碼是固定的,必須要放到j(luò)s中*/
function setupWebViewJavascriptBridge(callback) {
    if (window.WebViewJavascriptBridge) { return callback(WebViewJavascriptBridge); }
    if (window.WVJBCallbacks) { return window.WVJBCallbacks.push(callback); }
    window.WVJBCallbacks = [callback];
    var WVJBIframe = document.createElement('iframe');
    WVJBIframe.style.display = 'none';
    WVJBIframe.src = 'wvjbscheme://__BRIDGE_LOADED__';
    document.documentElement.appendChild(WVJBIframe);
    setTimeout(function() { document.documentElement.removeChild(WVJBIframe) }, 0)
}

附上的地址:WebViewJavascriptBridge
同時附上Demo地址:JTWKWebView_NativeToJS
希望對大家有用,如果有不對的地方歡迎指正,最后希望喜歡的小伙伴點贊,謝謝。

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

相關(guān)閱讀更多精彩內(nèi)容

  • 1、通過CocoaPods安裝項目名稱項目信息 AFNetworking網(wǎng)絡(luò)請求組件 FMDB本地數(shù)據(jù)庫組件 SD...
    陽明AI閱讀 16,186評論 3 119
  • 過完燥熱的暑假,迎來了多雨的開學(xué)季,轉(zhuǎn)眼間我已經(jīng)大三了。內(nèi)心既有喜悅,又有一絲焦慮。喜悅的是自己內(nèi)心成長了不少,焦...
    一路向陌m閱讀 527評論 0 0
  • HTML 篇 樣式兼容性問題 怪異模式 怪異模式是沒有遵守 W3C 規(guī)范的一種兼容模式,其中的 width 是包括...
    faremax閱讀 1,053評論 0 7

友情鏈接更多精彩內(nèi)容