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协议。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容