UIWebView与WKWebView

来源:互联网 发布:php微商城 编辑:程序博客网 时间:2024/06/06 15:02

一、概述

UIWebView自iOS2就有,WKWebView从iOS8才有,毫无疑问WKWebView将逐步取代笨重的UIWebView。WKWebView只能用代码创建,而且自身就支持了右滑返回手势allowsBackForwardNavigationGestures和加载进度estimatedProgress等一些UIWebView不具备却非常好用的属性。通过简单的测试即可发现UIWebView占用过多内存,且内存峰值更是夸张。WKWebView网页加载速度也有提升,但是并不像内存那样提升那么多。下面列举一些其它的优势:

  • 更多的支持HTML5的特性
  • 官方宣称的高达60fps的滚动刷新率以及内置手势
  • Safari相同的JavaScript引擎
  • 将UIWebViewDelegate与UIWebView拆分成了14类与3个协议(官方文档说明)
  • 另外用的比较多的,增加加载进度属性:estimatedProgress

 

二、UIWebView的用法

1、加载网页或本地文件

注意,如果上述的:

改为:

会无法加载网页并有如下提示:

原因为ATS禁止了HTTP的明文传输,因为它不安全。可以修改Info.plist文件,让它临时允许明文传输。

解决办法:
在Info.plist文件中添加”App Transport SecuritySettings”,Type为”Dictionary”,再添加一个item为”Allow Arbitray Loads”,Type 为”Boolean”,“Value”为“YES”即可。

 

2、网页导航刷新有关函数

 

3、相关代理协议

 

4、与JS交互

(1)OC调用JS

OC调用JS主要通过下面方法:

我们只需要传入要执行的JS代码块即可,如果有返回值,可以接收NSString类型返回值。

例如,我们获取网页Title并赋值给导航控制器Title:

运行结果:

Snip20170208_15

点击“调用JS”按钮后:

Snip20170208_16

 

(2)JS调用OC

JS是不能执行OC代码的,但是可以变相的执行,JS可以将要执行的操作封装到网络请求里面,然后OC拦截这个请求,获取URL里面的字符串解析即可,这里用到代理协议的如下方法:

例如:

 

三、WKWebView的用法

WKWebView 和 UIWebView 的基本使用方法相类似,但是需要导入头文件 #import <WebKit/WebKit.h>。

1、加载网页

加载网页方法与UIWebView相同:

 

2、加载文件

其他几个加载方法:

 

3、网页导航刷新有关函数

  • reloadFromOrigin会比较网络数据是否有变化,没有变化则使用缓存,否则从新请求。
  • goToBackForwardListItem:比向前向后更强大,可以跳转到某个指定历史页面

 

4、常用属性

  • allowsBackForwardNavigationGestures:BOOL类型,是否允许左右划手势导航,默认不允许
  • estimatedProgress:加载进度,取值范围0~1
  • title:页面title
  • scrollView.scrollEnabled:是否允许上下滚动,默认允许
  • backForwardList:WKBackForwardList类型,访问历史列表,可以通过前进后退按钮访问,或者通过goToBackForwardListItem函数跳到指定页面

 

5、相关代理协议

几个常用代理协议:

(1)WKNavigationDelegate

最常用,和UIWebViewDelegate功能类似,追踪加载过程,有是否允许加载、开始加载、加载完成、加载失败。下面会对方法做简单的说明,并用数字标出调用的先后次序:1-2-3-4-5

三个是否允许加载方法:

追踪加载过程方法:

 

(2)WKUIDelegate

UI界面相关,原生控件支持,三种提示框:输入、确认、警告。首先将web提示框拦截然后再做处理。

 

6、与JS交互

(1)WKWebView加载JS

 

(2)WKWebView执行JS方法

 

0 0
原创粉丝点击