OC与JS交互

当我们想要在 iPhone 端加载一个网页时, 往往需要对这个页面做一些处理, 这就涉及到了 JS(JavaScript) 交互

以大众点评的一个团购信息页为例
这是网址: http://t.dianping.com/deal/8820236

这里写图片描述

这里写图片描述

因为UIWebView 太耗费性能, 所以采用WKWebView

1.首先导入框架

#import <WebKit/WebKit.h>

2.加载页面, 在 viewDidLoad中写下列代码

NSURL *url = [NSURL URLWithString:@"http://t.dianping.com/deal/8820236"];

NSURLRequest *request = [NSURLRequest requestWithURL:url];
WKWebView *webView = [[WKWebView alloc] initWithFrame:self.view.bounds];

[webView loadRequest:request];

[self.view addSubview:webView];

此时可以运行看看页面是否加载成功

3.我们需要在页面即将加载完毕的时候, 删除我们不想要的元素, 所以需要我们监听 webView 的加载情况

// 设置代理, 遵守协议 WKNavigationDelegate
webView.navigationDelegate = self;

webView, 有两个协议, 其中 navigationDelegate 用来追踪加载过程, 即页面开始加载、加载完成、加载失败; UIDelegate 处理web界面的三种提示框(警告框、确认框、输入框)

实现代理方法

- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation {
}

我们在这个方法中, 编写与JS交互相关的代码

这里需要补充一些关于JS交互的知识:
1>我们使用JS可以修改网页上元素的值, 也可以删掉任意我们想要删掉的元素, 但是做这些事情的前提是, 我们要找到它, 才能对它做一系列的操作
2>想要找到某一个元素, 关键点就是通过decument 调用它的方法来查询对应的元素
3>我们可以根据 id 来找, 也可以通过标签名, 还可以通过class名
这里写图片描述
4>找到该元素之后, 通过parentNode 找到它的父控件, 然后通过它的父控件删除它

打开我们的浏览器, 调到开发者工具界面(我用的谷歌), 调到手机版
这里写图片描述

body里面就是元素构成, 当我们指向里面的某一行时, 对应的元素会发光
这里写图片描述

此时,如果我们直接按Delete 键删掉这一行, 我们就会发现上面的导航栏不见了, 所有我们可以肯定, 这个header 就是我们要删掉的东西
因为整个页面只有一个header, 所以我们直接通过header 来找到我们需要的元素, 通过代码查找的方式如下图(这是根据标签名的方式):
这里写图片描述

这里写图片描述

var headerElement = document.getElementsByTagName('header')[0];
headerElement.parentNode.removeChild(headerElement);

定义一个变量, 接收这个元素, 通过parentNode 找到它的父级元素, 然后把它自己删掉, 通过上面的代码, 我们就能把导航栏删掉, 所以这个就是我们需要的 JavaScript 语句

再来看 webView 的代理方法
这里写图片描述

此时运行我们的程序, 就会发现导航栏已经被删掉了~

同理, 我们可删除掉其他我们不想要的元素

// 删除底部view
NSString *deleteFooterElement = @"var footerElement = document.getElementsByTagName('footer')[0]; footerElement.parentNode.removeChild(footerElement);";
[webView evaluateJavaScript:deleteFooterElement completionHandler:nil];

// 删除底部的button
NSString *deleteButtonElement = @"var button = document.getElementsByClassName('footer-btn-fix')[0]; button.parentNode.removeChild(button);";
[webView evaluateJavaScript:deleteButtonElement completionHandler:nil];

其中 JavaScript 中的变量名, 没有要求, 可以随便定义
此时再运行我们的程序, 就会发现我们想要删掉的已经都删掉了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值