現(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
希望對大家有用,如果有不對的地方歡迎指正,最后希望喜歡的小伙伴點贊,謝謝。