Objective-C UIWebview JS 交互

一、在OC中调用网页中的 js 方法。
  • Objective-C 代码

[self.webView stringByEvaluatingJavaScriptFromString:@"alertMessage('弹窗')"];
  • 网页 JS 中方法

function alertMessage(message) {

    alert(message);
}

 二、网页超链接调用Objective-C中的方法

1.设置webView的代理<UIWebViewDelegate>
2.实现代理方法shouldStartLoadWithRequest:(该方法当url加载的时候会自动执行)
  • 网页代码

<a href="client://addImg/headImg">点我调用OC方法</a>
  • Objective-C 核心代码

#pragma mark UIWebViewDelegate 方法
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {

    // 可以直接拿到发送请求的网址
    NSString *urlStr = request.URL.absoluteString;
    
    if ([urlStr hasPrefix:@"client://"]) { // 判断请求是不是以 client:// 开头
        
        //获得去除请求头的 url 路径
        NSString *urlContent = [urlStr substringFromIndex:[@"client://" length]];
        
        //用 / 来拆分字符串
        NSArray *urls = [urlContent componentsSeparatedByString:@"/"];
        
        NSString *funName = [NSString stringWithFormat:@"%@:", urls[0]]; // 从url获取方法名,带参数的方法,加冒号
        
        SEL callFun = NSSelectorFromString(funName);
        
        //取消警告
        # pragma clang diagnostic push
        # pragma clang diagnostic ignored "-Warc-performSelector-leaks"
        
        [self performSelector:callFun withObject:urls[1]]; // 调用 OC 中的方法,并且传递参数
        
        return NO;  
    }
    
    return YES;
}

#pragma mark 此方法通过网页调用
-(void)addImg:(NSString *) headImg {

    NSLog(@"通过网页调用OC方法:%@",headImg);
}

三、Objective-C 注入JS到网页

  • Objective-C 核心代码

- (void)jsClick {  
    [self.webView stringByEvaluatingJavaScriptFromString:@"var script = document.createElement('script');"  
     "script.type = 'text/javascript';"  
     "script.text = "function myFunction() { "   //定义myFunction方法  
     "var field = document.getElementsByName('word')[0];"  
     "field.value='WWDC2014';"  
     "document.forms[0].submit();"  
     "}";"  
     "document.getElementsByTagName('head')[0].appendChild(script);"];  //添加到head标签中  
  
    [self.webView stringByEvaluatingJavaScriptFromString:@"myFunction();"];  
}
原文地址:https://www.cnblogs.com/duke-cui/p/11099138.html