iOS12 UIWebView转换WKWebView
iOS12已经完全弃用UIWebView改用WKWebView
WKWebView是苹果公司在iOS8系统推出的,相比于UIWebView的优势:
1.在性能、稳定性、占用内存方面有很大提升;
2.允许JavaScript的Nitro库加载并使用(UIWebView中限制)
3.增加加载进度属性:estimatedProgress,不用在自己写假进度条了
4.更多的支持HTML5的特性
5.官方宣称的高达60fps的滚动刷新率以及内置手势
6.Safari相同的JavaScript引擎
7.将UIWebViewDelegate与UIWebView拆分成了14类与3个协议(官方文档说明)
8.另外用的比较多的,增加加载进度属性:estimatedProgress
=========================================
用法介绍:
- 导入库 :WebKit.framework
- 导入头文件 :#import <WebKit/WebKit.h>
- 如果xib或者storyboard中已经拖拽了WebView,删除WebView,拖拽WebKitView来替换原来的WebView
- 在需要实现webView的控制类中创建WKWebView属性
- 在需要实现webView的控制类中继承WKNavigationDelegate, WKUIDelegate
- 实现委托 :
wkWebView.navigationDelegate = self; - WKNavigationDelegate代理方法 :
<1>在发送请求之前,决定是否跳转
- (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler;
<2>页面开始加载时使用
- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(null_unspecified WKNavigation *)navigation;
<3>在收到响应是,决定是否跳转
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler;
<4>内容开始返回时使用
- (void)webView:(WKWebView *)webView didCommitNavigation:(null_unspecified WKNavigation *)navigation;
<5>页面加载完成时使用
- (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation;
<6>页面加载失败时使用
- (void)webView:(WKWebView *)webView didFailNavigation:(null_unspecified WKNavigation *)navigation withError:(NSError *)error;
<7>接收到服务器跳转请求的时候调用
- (void)webView:(WKWebView *)webView didReceiveServerRedirectForProvisionalNavigation:(null_unspecified WKNavigation *)navigation;
tips :
如果实现关于是否跳转的协议方法,其中decisionHandler必须调用,传入参数为WKNavigationActionPolicyCancel,WKNavigationActionPolicyAllow。
否则程序会crash。 - WKUIDelegate代理方法 :
UI界面相关,原生控件支持,三种提示框:输入、确认、警告。
首先将web提示框拦截然后再做处理。
<1>创建一个新的webView
- (nullable WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures;
<2>webView关闭
- (void)webViewDidClose:(WKWebView *)webView API_AVAILABLE(macosx(10.11), ios(9.0));
<3>警告框
- (void)webView:(WKWebView *)webView runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(void))completionHandler;
<4>确认框
- (void)webView:(WKWebView *)webView runJavaScriptConfirmPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(BOOL result))completionHandler;
<5>输入框
- (void)webView:(WKWebView *)webView runJavaScriptTextInputPanelWithPrompt:(NSString *)prompt defaultText:(nullable NSString *)defaultText initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(NSString * _Nullable result))completionHandler;
9.加载本地html :
<1>大概使用方法跟UIWebView是一样的,举例 :
NSString *filePath = [[NSBundle mainBundle]pathForResource:@“test” ofType:@“html”];
NSURL *url = [NSURL fileURLWithPath:filePath];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[wkWebView loadRequest:request];
tips : 路径变成图片路径,同样可以加载图片。
<2>一些常用属性
allowsBackForwardNavigationGestures:BOOL类型,是否允许左右划手势导航,默认不允许
estimatedProgress:加载进度,取值范围0~1
title:页面title
.scrollView.scrollEnabled:是否允许上下滚动,默认允许
backForwardList:WKBackForwardList类型,访问历史列表,可以通过前进后退按钮访问,或者通过goToBackForwardListItem函数跳到指定页面
tips :
- 如果需要背景色透明,需要设置以下参数 :
wkWebView.backgroundColor = [UIColor clearColor];
wkWebView.opaque = NO - 禁止拖拽时候的反弹效果 :
[(UIScrollView *)[[wkWebView subviews] objectAtIndex:0] setBounces:NO]; - WKWebView中加载html之后,不会像UIWebView一样,自动缩放,如果需要按照当前webView的大小进行自动缩放的话,需要添加以下代码 :
- (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation {
NSString *injectionJSString = @“var script = document.createElement(‘meta’);”
“script.name = ‘viewport’;”
“script.content=“width=device-width, initial-scale=1.0,maximum-scale=1.0, minimum-scale=1.0, user-scalable=no”;”
“document.getElementsByTagName(‘head’)[0].appendChild(script);”;
[webView evaluateJavaScript:injectionJSString completionHandler:nil];
}
- (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation {
iOS12 UIWebView转换WKWebView相关推荐
- iOS之LCWebView(和并UIWebView和WKWebView,兼容iOS7及以上)
一,说明 我的项目是从iOS7开始支持, 一直用UIWebView作为网页容器. 但是,为了更好的用户体验. 我将UIWebView和WKWebView封装合并成一个网页容器LCWebView. 下面 ...
- UIWebView、WKWebView使用详解及性能分析
一.整体介绍 UIWebView自iOS2就有,WKWebView从iOS8才有,毫无疑问WKWebView将逐步取代笨重的UIWebView.通过简单的测试即可发现UIWebView占用过多内存,且 ...
- 记录苹果构建吃包,苹果报itms-90809,cordova 需要将UIWebView转为WKWebView
记录苹果构建吃包,苹果报itms-90809,cordova 需要将UIWebView转为WKWebView 参考链接 步骤 1. 添加cordova-ios 需要是5.1.1 以上 2.增加cord ...
- iOS-获取UIWebView或者WKWebView页面的视频连接
说明 不论使用的是UIWebView还是WKWebView,控件在加载有视频的网页时,我们想抓取网页上的视频链接,用来干其他的事,这里我演示抓取视频链接用自己自定义的视频播放器来播放. UIWebVi ...
- UIWebView和WKWebView的使用及js交互
web页面和app直接的交互是很常见的东西,之前尝试过flex和js的相互调用以及android和js的相互调用,却只有ios没试过,据说比较复杂.周末花了点时间研究了一下,确实和其他的不太一样,但是 ...
- android webview ios uiwebview和wkwebview的交互以及本地缓存
android webview js调用java的方式 1.java通过注解@JavascriptInterface导出方法, js通过window.别名.方法名调用方法 2.拦截url方式,通过sh ...
- iOS下JS与OC互相调用(五)--UIWebView + WebViewJavascriptBridge
WebViewJavascriptBridge是一个有点年代的JS与OC交互的库,使用该库的著名应用还挺多的,目前这个库有7000+star.我去翻看了它的第一版本已经是4年前了,在版本V4.1.4以 ...
- WKWebView 那些坑
导语 WKWebView 是苹果在 WWDC 2014 上推出的新一代 webView 组件,用以替代 UIKit 中笨重难用.内存泄漏的 UIWebView.WKWebView拥有60fps滚动刷新 ...
- wkWebView 的一些问题
导语 WKWebView 是苹果在 WWDC 2014 上推出的新一代 webView 组件,用以替代 UIKit 中笨重难用.内存泄漏的 UIWebView.WKWebView 拥有60fps滚动刷 ...
最新文章
- 再探C#类与结构体究竟谁快——考虑栈变量、栈分配、64位整数、密封类
- 自定义变量 配置文件_跟我一起学.NetCore之自定义配置源热更新对象绑定
- 南开大学2014年高等代数部分试题解答
- 云服务器ecs的特点有什么
- maven工程错误汇总
- Java EE 6示例– Galleria –第3部分
- linux 8002端口,linux – 如何限制反向SSH调整端口?
- Bailian4151 电影节【贪心】
- SQL 复习二(数据查询语言)
- c语言水库抽样算法代码,LeetCode---蓄水池抽样算法
- postSQL 正则表达式与like使用
- IT行业职位分为六大类
- SpringBoot、SpringCloud版本中GA/PRE/SNAPSHOT的详解
- Maven setting文件配置错误:Non-parseable settings..in comment after two dashes (--) next character must be
- STM32MP157网络环境 TFYPNFS搭建手册-学习记录
- 史上最全面试题汇总,没有之一,不接受反驳
- 微软收购以色列触控笔技术
- 微信如何设置延迟到账 | 微信到账时间设置在哪里设置 | 微信转账后24小时/2小时/立即到账怎么设置
- 二元函数对xy同时求导_更新丨10分钟掌握高等数学上册函数极限求解问题(考研、期末复习均可以用)...
- 腾讯撤回的消息在服务器吗,腾讯云IM消息撤回