UIWebView:
1.普通交互方式
OC 调用 JS:
直接通过调用API stringByEvaluationJavaScriptFromString 与JS交互
JS 调用 OC:
通过 shouldStartLoadWithRequest 方法,对url 进行拦截
获取URL的scheme、pathComponents,进行路由处理:利用Method反射NSSelectorFromString进行方法调用
2.JavaScriptCore
获取上下文jsContext
[webView valueForKeyPath:@“documentView.webView.mainFrame.javaScriptContext”]
或
[JSContext currentContext]
JS调用OC:
jsContext[‘oc_methodName’] = ^(){
[JSContext currentArguments] //获取参数
}
OC调用JS:
[jsContext evaluateScript:@“js_methodName”]
或
[[JSContext currentContext][@“js_methodName”] callWithArguments:@[dict]]
异常的捕获:
jsContext.exceptionHandler -> context.exception获取异常
JS直接调用OC对象:
OC对象要遵循JSExport协议
jsContext[@“ocObj”] = ocObj
JSExportAs(getS, -(int)getSum:(int)a numB:(int)b) 方法取别名
WKWebView:
JS调用OC:
1.通过decidePolicyForNavigationAction拦截URL
2.通过实现WKScriptMessageHandler协议方法(注意 移除Handler 否则引起循环引用)
OC调用JS:
- (void)evaluateJavaScript:(NSString *)javaScriptString completionHandler:(void (^ _Nullable)(_Nullable id, NSError * _Nullable error))completionHandle
WebViewJavascriptBridge(同时支持UIWebView和WKWebView):
JS调用OC:
OC通过registerHandler注册方法、js通过 WebViewJavascriptBridge.callHandler调用注册方法
OC调用JS:
JS通过bridge.registerHandler注册方法;OC通过callHandler调用
网友评论