JS交互的方法(上)UIWebView
来源:互联网 发布:网络综合布线品牌 编辑:程序博客网 时间:2024/05/17 00:10
在这篇文章中我们主要介绍用UIWebView(系统API)和WKWebView(系统API)实现OC与HTML的交互
UIWebView
1. OC调用JS
有时我们会有这样的需求,需要将某个网页加载到我们的APP中,但是又不想用户一眼就看出加载的是网页,这样就需要去掉网页中能看出是网页的元素,例如下面这些元素:
或者仅仅想加载某个页面,不进行跳转,这样就需要去掉网页中能触发跳转时间的元素,例如下面这些元素:
这是我们就要通过OC调用JS的方法来把这些元素删除,怎么做呢,让我们上代码看看:
首先加载页面
self.homeWebView = [[UIWebView alloc] initWithFrame:CGRectMake(0, -68, kScreenWidth, kScreenHeight + 68)]; [self.view insertSubview:self.homeWebView atIndex:0]; self.homeWebView.delegate = self; NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://m.121dian.com/index/h_evyy7j"]]; [self.homeWebView loadRequest:request];
遵守代理实现代理方法
//遵守代理<UIWebViewDelegate>- (void)webViewDidFinishLoad:(UIWebView *)webView { //字符串为HTML语句,为了防止出错,可以打开要加载的网页,到开发者选项中书写语句,然后再拷贝过来 [webView stringByEvaluatingJavaScriptFromString: //查找元素 @"var headerElement = document.getElementsByTagName('header')[0];" //删除元素 "headerElement.parentNode.removeChild(headerElement);" "var appElement = document.getElementsByClassName('app-down')[0];" "appElement.parentNode.removeChild(appElement);" "var bottomTextElement = document.getElementsByClassName('g-none footer-link')[0];" "bottomTextElement.parentNode.removeChild(bottomTextElement);" "var sharedTextElement = document.getElementsByClassName('corporate-culture')[0];" "sharedTextElement.parentNode.removeChild(sharedTextElement);" ""];}
2. JS调用OC
接下来我们要看一下点击网页的元素,调用OC中的方法这一功能。先来看一下下面的例子,点击网页的图片跳转控制器:
首先加载页面
方法与上面的方法相似,不在赘述。
遵守代理实现代理方法
这次要实现两个代理方法,第一个代理方法是OC调用JS找到相应的元素并添加相应事件(这里是添加点击事件)
-(void)webViewDidFinishLoad:(UIWebView *)webView { [self.myWebView stringByEvaluatingJavaScriptFromString: //找到对应的元素 @"var figureElement = document.getElementsByTagName('figure')[0];" "var imgElement = figureElement.children[0];" //添加相应事件(这里是点击事件) "imgElement.onclick = function(){window.location.href = 'http://www.baidu.com'};" ""];}
第二个代理方法在加载页面时调用,返回YES表示加载页面,返回NO表示不加载页面,这个代理方法只有在加载页面时才会调用,所以我们添加的点击事件是加载百度网页,加载时会调用这个代理方法,如果这个代理方法返回NO,就不会真正的加载页面,而我们可以在这个方法中执行我们需要的代码。所以可以认为这个代理方法是个拦截方法。
-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { //判断是否是添加点击事件要跳转的网页 if ([request.URL.absoluteString isEqualToString:@"http://www.baidu.com/"]) { //如果是则跳转控制器,同时拦截网页加载 JumpViewController *jumpVC = [[JumpViewController alloc] init]; [self.navigationController pushViewController:jumpVC animated:YES]; return NO; } return YES;}
1 0
- JS交互的方法(上)UIWebView
- UIWebView 与 JS 交互(1): stringByEvaluatingJavaScriptFromString方法的调用
- UIWebView与JS交互上
- JS与UIWebView的交互
- UIWebView与JS的交互
- UIWebView与JS的交互
- UIWebView与JS的交互
- UIWebView与JS的交互
- JS和Native交互之 -UIWebView的代理方法
- UIWebView与js(javascript) 的交互 示例
- Uiwebview 的JS 交互 以及 点击事件
- UIWebView 与服务器端的JS交互
- UIWebView 与JS的交互2
- UIWebView与JS的深度交互
- UIWebView与JS的深度交互
- UIWebView与JS的深度交互
- UIWebView与JS的深度交互
- UIWebView与JS的深度交互
- 对AngularJS模板的理解
- 如何测试一个网页登陆界面
- Lucene中文分词Demo
- Linux 创建本地YUM Repo
- CoVH之柯南开锁_vijos 1204_匹配
- JS交互的方法(上)UIWebView
- split large file linux
- Ubuntu 16.04更新软件提示"需要安装不能信任的软件包" http://archive.ubuntukylin.com:10006/ubuntukylin xenial InRelease
- 项目47-用文件保存的学生名单
- WSDL 详解
- HTTP状态码查询
- 解决Ubuntu下Sublime Text 3无法输入中文
- Java多线程编程总结
- 数据库事务_笔记1