OC调JS删除网页内容第二弹

OC删除网页中的指定的元素


需求

既上次成功删除网页元素后,成功得将有赞”变成”我们app的一部分之后,最近老大又提了新的需求,将书单来了继续”变成”我们的一部分,需求来了,问题也就来了

问题一 删除选中的图片

不同于上次的是,这次需要删除的元素是在body里面更加里面的层级关系,而且没有关键字,无法查询到;通过开发者工具我们可以看到,这是一个p标签里面的内容,而且他把信息写在了img里面

解决办法

根据className查询到数组,然后取孩子的下标来删除

如图

代码

1
2
3
4
5
6
7
8
9
10
11
12
- (void)webViewDidFinishLoad:(UIWebView *)webView{
//定义可变字符串
NSMutableString *stringM = [NSMutableString string];
//拼接删除的字符串
[stringM appendString:@"var headerImg = document.getElementsByClassName('rich_media_content ')[0].children[0];headerImg.parentNode.removeChild(headerImg);"];
//OC调用一下JS代码
[webView stringByEvaluatingJavaScriptFromString:stringM];
}

问题二 删除选中的二维码和指纹

这种情况是当整个页面某一个class的内容过多(孩子过多),例如当前的页面所有的内容都是一张图片的里面的子图片,子文字,如果一个一个数,恐怕会累死

解决办法

通过query方法查询

如图

代码

1
2
3
4
5
6
7
8
9
10
11
12
- (void)webViewDidFinishLoad:(UIWebView *)webView{
//定义可变字符串
NSMutableString *stringM = [NSMutableString string];
//删除底部的二维码及指纹
[stringM appendString:@"var sss = document.querySelector('section[donone]');sss.parentNode.removeChild(sss);"];
//OC调用一下JS代码
[webView stringByEvaluatingJavaScriptFromString:stringM];
}

问题三 改变当前页面的文字

当把所有有关于”书单来了”的信息删除以后,还有一个问题就是标题名”书单来了|这7本书,是文学大师的冷门佳作”,要是可以把”书单来了”删除就好了

解决办法

通过innerHTML来改变内容
遇到的小问题:

document.getElementById(‘activity-name’).innerHTML = “这7本书,是文学大师的冷门佳作”;这句话在console里面直接执行就可以实现效果,但是写在OC代码里面是不执行的,后来google下才发现,在OC代码中写法有误

代码

1
2
3
4
5
6
7
8
9
10
11
- (void)webViewDidFinishLoad:(UIWebView *)webView{
//定义可变字符串
NSMutableString *stringM = [NSMutableString string];
[stringM appendString:@"document.getElementById('activity-name').innerHTML = '这7本书,是文学大师的冷门佳作';"];
//OC调用一下JS代码
[webView stringByEvaluatingJavaScriptFromString:stringM];
}

这样我们基本上就可以完成大部分的需求了,书单来了也成功得变成了我们app的一部分.

这个人很帅<br>他什么都不想说<br>