美文网首页
OC与JS的交互

OC与JS的交互

作者: lmfei | 来源:发表于2019-09-30 16:30 被阅读0次

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调用

相关文章

网友评论

      本文标题:OC与JS的交互

      本文链接:https://www.haomeiwen.com/subject/oxhhpctx.html