OC与JS交互

WKWebView

- OC调用JS:

[webView evaluateJavaScript:@"我是JS"completionHandler:^(id_Nullable response,NSError* _Nullable error) { }];

- JS调用OC:

JS写法:window.webkit.messageHandlers.<对象名>.postMessage(<数据>)

上方代码在JS端写会报错,导致页面后面业务不执行.可使用try-catch执行

OC写法:

UIWebView

- OC调用JS:

self.title = [webView stringByEvaluatingJavaScriptFromString:@"document.title"];

- JS调用OC:

a. webView拦截url链接

JS写法:window.location.href = "scheme://method?params={}"

OC写法:实现以下webView的代理方法,当webView每次开始加载URL时会进入这个方法,我们便可以在这个方法实现JS调用OC

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;

总结:这种JS调用OC的方法的缺点十分明显,需要繁琐地解释字符串得到相应的方法名和传值,且调用的方法也不能传递返回值;但优点是:不需要等待页面加载完才触发,当相应的代码被运行就能调用OC的方法

b. JavaScriptCore

JavaScriptCore是苹果在iOS7时新推出用以实现JS和iOS代码交互的框架,十分简单高效。使用这种,需要导入JavaScriptCore.framework框架。

JS写法:window.wealth.method('param1', 'param2');

OC写法:必须在 - (void)webViewDidStartLoad:(UIWebView*)webView 和 - (void)webViewDidFinishLoad:(UIWebView*)webView 方法中调用以下方法。wealth中要实现JSExport协议。

你可能感兴趣的:(OC与JS交互)