webView与js交互
问:在UIWebView上点击回复,如何使用UITextField进行回复?
答:UIWebView有一个stringByEvaluatingJavaScriptFromString方法,可以将js嵌入页面中,通过这个方法,我们可以在iOS中与web的网页元素交互。通过js获取点击时间,弹出UITextField,输入字符串后,可以通过post请求发送回复。
一、App调用JS方法
首先app调用js方法使用系统自带的stringByEvaluatingJavaScriptFromString,这里简单实现就在webView加载完成的时候调用js内部alert方法
- (void)webViewDidFinishLoad:(UIWebView *)webView { // 第一步 app call js method [self.webView stringByEvaluatingJavaScriptFromString:@"alert()"]; }
二、JS调用App方法
实现思路:使用webView代理方法webView:shouldStartLoadWithRequest:navigationType:(是否允许加载某个请求)拦截JS重定向的URL,然后对URL进行解析
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { // 第二步 js all app method NSURL *url = [request URL]; NSString *urlStr = [url absoluteString]; NSLog(@"absoluteString --> %@",urlStr); if ([[url scheme] isEqualToString:@"jscalloc"]) { NSArray *arr = [urlStr componentsSeparatedByString:@"://"]; NSString *methodName = [arr lastObject]; SEL sel = NSSelectorFromString(methodName); [self performSelector:sel]; } return YES; } - (void)test { NSLog(@"i love jiang beibei"); }
下面是html部分代码
<html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> <script> function action() { window.location.href = "jscalloc://test"; } </script> </head> <body> <p>我爱姜贝贝</p> <p>我爱姜贝贝</p> <p>我爱姜贝贝</p> <button onclick="action()">btnbtn</button> </body> </html>
本文 Demo传送门