OC与JS之间的交互
2016-10-09 10:14
429 查看
#import "ViewController.h" #import "TestViewController.h" @interface ViewController () <UIWebViewDelegate> @property (weak, nonatomic) IBOutlet UIWebView *webView; @end /* JS注入 : 把JS代码有OC注入到网页 JS注入又叫做OC和JS的交互 OC和JS的交互需要一个桥梁(中介),这个桥梁就是UIWebView的代理方法 */ @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // 设置webView的代理 self.webView.delegate = self; // 加载网页数据 NSURL *URL = [NSURL URLWithString:@"http://m.dianping.com/tuan/deal/5501525"]; NSURLRequest *request = [NSURLRequest requestWithURL:URL]; [self.webView loadRequest:request]; } /// 网页加载完成之后调用的代理方法 : JS注入 : OC调用JS代码 - (void)webViewDidFinishLoad:(UIWebView *)webView { // 用于拼接JS代码的字符串 NSMutableString *stringM = [NSMutableString string]; // 拼接移除顶部导航的JS代码 [stringM appendString:@"var headerTag = document.getElementsByTagName('header')[0]; headerTag.parentNode.removeChild(headerTag);"]; // 拼接移除橙色按钮的JS代码 [stringM appendString:@"var footerBtnTag = document.getElementsByClassName('footer-btn-fix')[0]; footerBtnTag.parentNode.removeChild(footerBtnTag);"]; // 拼接移除底部布局的JS代码 [stringM appendString:@"var footerTag = document.getElementsByClassName('footer')[0]; footerTag.parentNode.removeChild(footerTag);"]; // 拼接给img标签添加点击事件的JS代码 [stringM appendString:@"var imgTag = document.getElementsByTagName('figure')[0].children[0]; imgTag.onclick = function(){window.location.href='https://www.long.com'};"]; // 这个方法就是UIWebView提供的.专门做JS注入的方法 [webView stringByEvaluatingJavaScriptFromString:stringM]; } /* imgTag.onclick = function(){window.location.href='https://www.long.com'} 点击imgTag时,主动发送网络请求 主动发送网络请求的目的 : 就是为了让UIWebView能够拦截到我的自定义的URL 通过自定义的URL,判断 / 区别 我点击的标签是否是我设计的那个标签 自定义独一无二的URL,表示点击的是独一无二的标签 总结起来就是两步 第一步 : JS注入标签的点击事件,并主动发送一个自定义的URL的请求 第二步 : 在UIWebView里面.拦截自定义的URL的请求,然后判断请求 */ // JS间接调用OC : JS和OC的交互 /// 网页即将开始加载时调用的代理方法 : 可以拦截到webView上的所有的网络请求 - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { // 获取拦截到的所有的请求 NSString *URLString = request.URL.absoluteString; // NSLog(@"%@",URLString); if ([URLString isEqualToString:@"https://www.long.com"]) { NSLog(@"我点击的是imgTag"); // 当我知道点击的是imgTag时,自动push TestViewController *testVC = [[TestViewController alloc] init]; [self.navigationController pushViewController:testVC animated:YES]; // 因为这个地址是无效地址.不需要加载的 return NO; } // 返回YES的作用 : 表示你拦截到的请求,允许正常的发送出去;反之,不允许拦截到的请求发送出去 return YES; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end
相关文章推荐
- OC与JS之间的交互
- OC和JS之间的交互
- iOS之oc与html之间的交互(oc中调用js的方法)
- iOS开发中OC与JS交互(UIWebView)
- Android中java和js之间的交互
- iOS JS 交互之利用系统JSContext实现 JS调用oc方法
- OC与JS交互---JavaScriptCore
- iOS和JS交互(含OC、html、js)代码不使用第三方库(二)
- OC和JS的交互,native页面和web页面混合
- OC与JS的交互
- iOS与Html5和JS之间的交互---学习笔记
- android与js之间的交互
- Android中webview和js之间的交互
- 使用WebViewJavascriptBridge实现OC与JS交互
- android 与JS之间的交互
- OC与js的交互 - javascriptCore
- OC-JS交互(WebViewJavascriptBridge使用说明)
- JS与OC交互--简单使用
- OC 与JS(WebView)交互
- JS与iOS交互之OC获取JS内容跳转到指定控制器实现技巧