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);"]; [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);"]; [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本书,是文学大师的冷门佳作';"]; [webView stringByEvaluatingJavaScriptFromString:stringM]; }
|
这样我们基本上就可以完成大部分的需求了,书单来了也成功得变成了我们app的一部分.