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协议。
网友评论