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 ...
随机推荐
- url override and HttpSession implements session
背景 HttpSession默认使用Cookie存储Session ID,如果在用户禁用浏览器Cookie的功能后,仍打算运用HttpSession来进行会话管理,那么可以搭配URL重写来实现. 实现 ...
- Others
1.可迭代对象可以被for循环获取 2.可变与不可变对象 不可变对象:数字 字符串 元组 所谓不可变是值和身份都不变 赋值时开辟新内存空间生成新值 可变 对象:列表 字典 集合 ...
- leetCode题解之反转二叉树
1.题目描述 经典的反转二叉树,就是将二叉树中每个节点的左.右儿子交换. 2.题目分析 3.代码 TreeNode* invertTree(TreeNode* root) { if(root == N ...
- TFS工具(tf.exe)使用与强制解除锁定签出
在工作区 NTP01_SUNTAI 中,NTP01TFSUser 为 签出 锁定了项 $/NTP01/EIPD/EIPD.Client/Views/Courseware/EditorOne.xaml. ...
- 阿里云ECS服务器环境搭建 ubuntu 16.04 图形界面的安装
https://blog.csdn.net/zwq912318834/article/details/80528374
- UIView使用UIMotionEffect效果
UIView使用UIMotionEffect效果 这个效果在模拟器上看不了,所以无法截图. UIView+MotionEffect.h + UIView+MotionEffect.m // // ...
- 将字典或者数组转换成JSON数据或者字符串
将字典或者数组转换成JSON数据或者字符串 源码: NSDictionary+JSON.h 与 NSDictionary+JSON.m // // NSDictionary+JSON.h // Cat ...
- zhuangxiu
红宝石家居广场国际家居馆 党湾综合市场(青年文明路)
- September 05th 2017 Week 36th Tuesday
I always in the deepest despair, meet the most beautiful sunrise. 我总是在最深的绝望里遇见最美丽的惊喜. Some pessimist ...
- November 20th 2016 Week 47th Sunday
Learn from yesterday, live for today, look to tomorrow. 学习昨天,活在今天,展望明天. There is always room at the ...