OC与JS之间的交互
来源:互联网 发布:python 入门教程 编辑:程序博客网 时间:2024/06/14 02:26
#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
0 0
- OC与JS之间的交互
- OC与JS之间的交互
- OC与JS的交互
- JS与OC的交互
- OC与JS的交互
- JS 与 OC 的 交互
- oc与js 交互
- oc与js交互
- JS与OC交互
- js与oc 交互
- OC与JS交互
- OC与JS交互
- OC与JS交互
- OC与JS交互
- OC 与JS 交互
- OC与JS交互
- oc 与 js 交互
- OC与JS交互
- 第7周项目1-建立顺序环形队列算法库
- Codeforces Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined)
- 数据库事务隔离级别
- 【WebGL】WebGL的坐标系统
- MAC下 JDK环境配置、版本切换以及ADB环境配置
- OC与JS之间的交互
- 如何在service中显示对话框dialog
- BAPI_LAYMOD_SAVEREPLICA
- java数据结构和算法(StringUtil)
- C++设计模式——简单工厂模式
- Android中:Activity、Content Provider、Broadcast和AIDLService4种跨历程通讯的方式
- 图像处理与计算机视觉的论文创新点总结
- php7新特性
- 如何使用java版张华平分词软件