UIWebView 是用来加载网页数据的一个框架。可以用来加载 pdf、word、txt 等文件。
UIWebView 加载函数
1 | - (void)loadRequest:(NSURLRequest *)request; |
加载网页
1 | UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 20, self.view.frame.size.width, self.view.frame.size.height - 20)]; |
代理方法
1 | // 是否允许加载网页,也可获取 JS 要打开的 url,通过截取此 url 可与 JS 交互 |
OC 与 JS 交互
OC 调用 JS
OC 调用 JS 是通过下面的方法来实现的
1 | - (nullable NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script; |
为方法传入的参数 script 是将要执行的 JS 代码块,可以接收 NSString 类型的返回值。
例如,打印网页的标题,方法如下:
1 | NSLog(@"%@",[webView stringByEvaluatingJavaScriptFromString:@"document.title"]); |
JS 调用 OC
JS 是不可以调用 OC 的,但是 JS 可以将需要执行的OC操作封装到网络请求之中,然后由 OC 来拦截这个请求,获取 url 字符串进行解析,实现变相的调用。这种调用主要依赖的代理方法是:
1 | - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType; |
当在 webView 中将要发起的网络请求的 url 写成 ios://js_sendMessage?title=111&detail=222 这个样子的时候,可以采用下面的方式在 APP 中截获请求,并进行相应的处理来调用本地的方法:
1 | - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { |
这样就实现了 JS 对 OC 的方法调用。