iOS:WKWebView(19-01-31更)
以前用得不多,先开一篇,以后有遇到再补充。
1、返回
2、JS 调用 OC
3、获取、修改、添加、删除网页信息
1、返回
if (self.mWebView.canGoBack == YES) {
[self.mWebView goBack];
}else{
//提示
};
2、JS 调用 OC
2-1)、添加 和 JS 约定的消息名
[self.userContentController addScriptMessageHandler:self name:@"约定的消息名"];
2-2)、得到 JS 消息
#pragma mark - WKScriptMessageHandler
- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message
{
if ([message.name isEqualToString:@"约定的消息名"]) {
NSLog(@"传过来的value为:%@", message.body[@"约定的key"]);
}
}
2-3)、移除
- (void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated]; [self.userContentController removeScriptMessageHandlerForName:@"约定的消息名"];
}
补充:这步最为重要,如果不移除,将得不到释放,比如H5的音乐在退出该VC(dealloc) 还会一直响。
附:JS代码
function isAndroid(argument) {
var u = navigator.userAgent;
var flag = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1; //android终端
return flag;
} function isIOS(argument) {
var u = navigator.userAgent;
var flag = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端
return flag;
} function share(要传的value) {
if(isAndroid()){ } else if(isIOS()) {
window.webkit.messageHandlers.约定的消息名.postMessage({
"约定的key": 要传的value
});
}
}
3、获取、修改、添加、删除网页信息
3-1)、获取
3-1-1)、获取网页数据
[webView evaluateJavaScript:@"document.body.outerHTML" completionHandler:^(id _Nullable htmlStr, NSError * _Nullable error) {
NSLog(@"htmlStr = %@",htmlStr);
}];
3-1-2)、获取网页高度,看需更新高度(如高度固定,网页内部能滑动,如更改高度为当前高度,网页不能滑动)
[webView evaluateJavaScript:@"document.body.scrollHeight" completionHandler:^(id result, NSError *_Nullable error) {
}];
补充:如计算出来的高度偏大、字体、图片偏小,可能是没自适应,需要对其修改。
参照 “3、获取、修改、添加网页信息” -> “3-3)、添加” -> “3-3-1)、自适应图片” 和 “3-3-2)、自适应文字”
3-2)、修改
3-2-1)、修改背景、文字颜色
[webView evaluateJavaScript:@"document.body.style.backgroundColor=\"#72ADFC \"" completionHandler:nil];
[webView evaluateJavaScript:@"document.body.style.webkitTextFillColor= '#FFFFFF'"completionHandler:nil];
3-2-2)、修改网页内容(比如:图片)
[webView evaluateJavaScript:@"document.getElementsByClassName('图片xxx')[0].src='http://www.测试测试.com/测试测试.jpg'" completionHandler:^(id _Nullable htmlStr, NSError * _Nullable error) {
// 延时再显示(否则之前的图片会显示出来,再刷新当前设置的图片,一闪而过)
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
// 显示
self.mainWebView.hidden = NO;
});
}];
3-3)、添加
3-3-1)、自适应图片。比如 @"document.body.scrollHeight" 算出来感觉偏大,图片偏小。需要在在html字符串增加数据
flexHtmlString = [NSString stringWithFormat:@"<html><head><meta content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0\" name=\"viewport\"><style type=\"text/css\">img{display: inline-block;max-width: 100%%}</style></head><body>\%@</body></html>",htmlString];
3-3-2)、自适应文字。比如 @"document.body.scrollHeight" 算出来感觉偏大,文字偏小。需要设置WKUserScript
NSString *jScript = @"var meta = document.createElement('meta'); meta.setAttribute('name', 'viewport'); meta.setAttribute('content', 'width=device-width'); document.getElementsByTagName('head')[0].appendChild(meta);"; WKUserScript *wkUScript = [[WKUserScript alloc] initWithSource:jScript
injectionTime:WKUserScriptInjectionTimeAtDocumentEnd
forMainFrameOnly:YES];
WKUserContentController *wkUController = [[WKUserContentController alloc] init];
[wkUController addUserScript:wkUScript];
3-3-3)、添加高度参数,源数据没style。
[webView evaluateJavaScript:@"document.getElementsByClassName('图片xxx')[0].style='width: 70px;height:auto !important;'" completionHandler:^(id _Nullable htmlStr, NSError * _Nullable error) {
}];
3-4)、删除
3-4-1)、删除子项
[webView evaluateJavaScript:@"document.body.removeChild(document.getElementsByClassName('xxx')[0])" completionHandler:^(id _Nullable htmlStr, NSError * _Nullable error) {
}];
3-4-2)、删除子项中的子项
[webView evaluateJavaScript:@"document.body.getElementsByClassName('xxx1')[0].removeChild(document.getElementsByClassName('xxx1')[0].getElementsByClassName('xxx2')[0])" completionHandler:^(id _Nullable htmlStr, NSError * _Nullable error) { }];
iOS:WKWebView(19-01-31更)的更多相关文章
- iOS WKWebview 网页开发适配指南
iOS WKWebview 网页开发适配指南 微信iOS客户端将于2017年3月1日前逐步升级为WKWebview内核,需要网页开发者提前做好网站的兼容检查和适配.如有问题,可参考文末联系方式,向我们 ...
- 编写高质量代码改善C#程序的157个建议——建议19:使用更有效的对象和集合初始化
建议19:使用更有效的对象和集合初始化 依赖于属性和FCL 3.5之后的语法规则,现在我们有了更加简洁有效的对象和集合初始化机制:对象和集合初始化设定项. 对象初始化: class Person { ...
- iOS 9适配技巧(更新版)
转自: http://www.cocoachina.com/ios/20150929/13598.html 中文快速导航: 1.iOS9网络适配_ATS:改用更安全的HTTPS(见Demo1) i ...
- iOS:动画(18-10-15更)
目录 1.UIView Animation 1-1.UIView Animation(基本使用) 1-2.UIView Animation(转场动画) 2.CATransaction(Layer版的U ...
- iOS WKWebView详解
UIWebView就不用说了,这个过时了,现在iOS8以后建议都使用WKWebView. WKWebView 是现代 WebKit API 在 iOS 8 和 OS X Yosemite 应用中的核心 ...
- ios WKWebView 与 JS 交互实战技巧
一.WKWebView 由于Xcode8发布之后,编译器开始不支持iOS 7了,这样我们的app也改为最低支持iOS 8.0,既然需要与web交互,那自然也就选择使用了 iOS 8.0之后 才推出的新 ...
- iOS WKWebView
Webkit 是 iOS 8.0 后提供的新的框架,组件WKWebView比较UIWebView 速度更快.占用内存更少了,可支持性更多 WKWebView可通过KVO监听属性 title.estim ...
- iOS开发,让数据更安全的几个加密方式
任何应用的开发中安全都是重中之重,在信息交互异常活跃的现在,信息加密技术显得尤为重要.在app应用开发中,我们需要对应用中的多项数据进行加密处理,从而来保证应用上线后的安全性,给用户一个安全保障.这篇 ...
- 微信iOS WKWebview 网页开发适配指南
微信iOS客户端将于2017年3月1日前逐步升级为WKWebview内核,需要网页开发者提前做好网站的兼容检查和适配. 背景 WKWebView 是苹果在iOS 8中引入的新组件,目的是提供一个现代的 ...
- iOS WKWebview 网页开发适配指南【转】
微信iOS客户端将于2017年3月1日前逐步升级为WKWebview内核,需要网页开发者提前做好网站的兼容检查和适配.如有问题,可参考文末联系方式,向我们咨询. 背景 WKWebView 是苹果在iO ...
随机推荐
- LAMP创建
httpd yum install httpd -y systemctl status httpd systemctl start httpd systemctl stop firewalld Mar ...
- linux_kernel_uaf漏洞利用实战
前言 好像是国赛的一道题.一个 linux 的内核题目.漏洞比较简单,可以作为入门. 题目链接: 在这里 正文 题目给了3个文件 分配是 根文件系统 , 内核镜像, 启动脚本.解压运行 boot.sh ...
- Linux服务器安装JDK运行环境教程
小Alan过些天可能就要去上海出差了,出差干啥?当然是部署项目上线咯!所以呢必须自己学会在Linux服务上面安装部署项目运行环境的啦!今天先跟大家聊聊最基本的jdk运行环境部署安装,后续再跟大家分享一 ...
- [翻译] 扩张卷积 (Dilated Convolution)
英文原文: Dilated Convolution 简单来说,扩张卷积只是运用卷积到一个指定间隔的输入.按照这个定义,给定我们的输入是一个2维图片,扩张率 k=1 是通常的卷积,k=2 的意思是每个输 ...
- Oracle案例11——Oracle表空间数据库文件收缩
我们经常会遇到数据库磁盘空间爆满的问题,或由于归档日志突增.或由于数据文件过多.大导致磁盘使用紧俏.这里主要说的场景是磁盘空间本身很大,但表空间对应的数据文件初始化的时候就直接顶满了磁盘空间,导致经常 ...
- iOS设计模式 - 命令
iOS设计模式 - 命令 原理图 说明 命令对象封装了如何对目标执行指令的信息,因此客户端或调用者不必了解目标的任何细节,却仍可以对他执行任何已有的操作.通过把请求封装成对象,客户端可以把它参数化并置 ...
- 【C语言】 任意十进制数字转十六进制
大概思路:输入任意十进制数字 首先确定位数: 使用整形数组来存储十六进制数: a[0] 表示十六进制数字的位数: #include <stdio.h> #include <stdli ...
- 阿里云CentOS 7服务器挂载数据盘
本次使用的是centOS 7.4 64位操作系统 第一步:查看磁盘情况 我们发现,我总共有三个磁盘,分别为/dev/vda(100G)./dev/vdb(200G)./dev/vdc(100G),而被 ...
- ZT 安卓手机的安全性 prepare for Q
如何增强安卓手机的安全性?安卓的安全性太低了!!! 众所周知,安卓手机是非常容易破解的,刷过机的人都知道,不管你之前在手机怎么设置密码,只要进入recovery清空使用记录,手机就会恢复出厂设置,到时 ...
- debian 7 linux 安装jdk出现Error occurred during initialization of VM java/lang/NoClassDefFoun
debian 7 linux 安装jdk出现Error occurred during initialization of VM java/lang/NoClassDefFoun 这两天一直研究lin ...