当前位置: 代码迷 >> 综合 >> iOS开发 UIWebView JS交互
  详细解决方案

iOS开发 UIWebView JS交互

热度:71   发布时间:2023-12-11 14:52:31.0

1.在OC修改/获取网页内容的方法

OC提供了Api,调用网页中的JS方法:stringByEvaluatingJavaScriptFromString;

通过这个方法,可以获取网页的URL,Tilte,插入JS脚本。

测试代码:

[objc]  view plain copy
  1. -(void)webViewDidFinishLoad:(UIWebView *)webView  
  2. {  
  3.     //获取URL  
  4.     NSString *curURL = [webView stringByEvaluatingJavaScriptFromString:@"document.location.href"];  
  5.       
  6.     //获取标题  
  7.     /* 
  8.      关于网页的标题 
  9.      在网页HTML代码中,网页标题位于<head> </head>标签之间。其形式为: 
  10.        <title>网络营销教学网站</title> 
  11.      */  
  12.     NSString *title = [webView stringByEvaluatingJavaScriptFromString:@"document.title"];  
  13.       
  14.     //修改属性值  
  15.     NSString *js_result = [webView stringByEvaluatingJavaScriptFromString:@"document.getElementsByName('good')[0].color='red';"];  
  16.       
  17.     //调用JS方法  
  18.     [webView stringByEvaluatingJavaScriptFromString:@"funnight()"];  
  19.       
  20.     //结果打印  
  21.     NSLog(@"jsresult=%@",js_result);  
  22.     NSLog(@"title=%@",title);  
  23.     NSLog(@"curURL=%@",curURL);  
  24. }  


2.在JS函数中调用OC中的方法

需要用到WebView的协议函数:

测试代码:

[objc]  view plain copy
  1. //JS中的button调用OC中的方法  
  2. //WebView每次重定向的时候会调用<UIWebViewDelegate>协议中的方法,  
  3. //无论地址是否合法,协议方法shouldStartLoadWithRequest都会被调用,  
  4. //这样我们就可以在JS中button的触发函数中使网页重定向到我们自定义的地址中,  
  5. //这样OC中的UIWebViewDelegate协议中的shouldStartLoadWithRequest就会被调用,  
  6. -(void)ocFunc  
  7. {  
  8.     NSLog(@"我是OC方法");  
  9. }  
  10. //(重定向之后)  
  11. -(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType  
  12. {  
  13. //    //刷新地址栏  
  14. //    if ([request.URL.absoluteString hasPrefix:@"http"]) {   
  15. //        _textFeild.text = request.URL.absoluteString;  
  16. //    }  
  17.     _textFeild.text = request.URL.absoluteString;  
  18.       
  19.     //  ://  
  20.     NSArray *array = [request.URL.absoluteString componentsSeparatedByString:@"://"];  
  21.       
  22.     if ([[array objectAtIndex:0] isEqualToString:@"oc"]) {  
  23.         NSString *ocStr = [array objectAtIndex:1];  
  24.           
  25.         //通过字符串调用函数  
  26.         SEL sel = NSSelectorFromString(ocStr);  
  27.         [self performSelector:sel];  
  28.     }  
  29.     return YES;  
  30. }