webView和js交互

与 js 交互

OC 调用 JS

// 执行 js - (void)webViewDidFinishLoad:(UIWebView *)webView { NSString *title = [webView stringByEvaluatingJavaScriptFromString:@"document.title;"]; NSLog(@"%@", title); [webView stringByEvaluatingJavaScriptFromString:@"clickme();"]; } 

JS 调用 OC

准备代码

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { NSLog(@"%@", request.URL); return YES; } 

在 OC 中,若是代理方法返回 BOOL 类型,返回 YES 会正常执行web

解释自定义协议

href="myfunc:///showMessage:/周末一块儿玩吧:D"

调用 OC 中的方法 `showMessage:` 显示内容 `郊游怎么样:D`

代码实现

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { NSLog(@"%@", request.URL.scheme); if ([request.URL.scheme isEqualToString:@"myfunc"]) { NSLog(@"%@", request.URL.pathComponents); NSArray *components = request.URL.pathComponents; NSString *funcName = components[1]; NSString *param = components[2]; SEL func = NSSelectorFromString(funcName); [self performSelector:func withObject:param]; } return YES; } 

代码细节

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { NSLog(@"%@", request.URL.scheme); if ([request.URL.scheme isEqualToString:@"myfunc"]) { NSLog(@"%@", request.URL.pathComponents); NSArray *components = request.URL.pathComponents; if (components.count != 3) { return NO; } NSString *funcName = components[1]; NSString *param = components[2]; SEL func = NSSelectorFromString(funcName); if ([self respondsToSelector:func]) { #pragma clang diagnostic push #pragma clang diagnostic ignored "-Warc-performSelector-leaks" [self performSelector:func withObject:param]; #pragma clang diagnostic pop } return NO; } return YES; }
相关文章
相关标签/搜索