基于QQ邮箱,浅谈UIWebView与WKWebView的区别

浅谈UIWebView与WKWebView

1.什么是WebView?WebView是一个基于webkit引擎、展现web页面的内嵌浏览器控件,我们可以用它来浏览网页、打开文档等;

在iOS中主要有两种WebView:UIWebView和WKWebView。2008年首次发布ios2,UIWebView诞生, 2014年发布ios8,WKWebView是在iOS8开始使用,WKWebView和UIWebView的本质是一样的,但WKWebView在UIWebView的基础之上做了优化,可以理解为WKWebView是UIWebView的升级版。

UIWebView对内存消耗大,流量消耗大,无法调用系统文件,硬件资源等。WKWebView内存占用是UIWebView的1/4~1/3 ,页面渲染效率高。

2.WebView加载方式有两种,一种通过输入URL或本地文件路径加载内容,一种通过一段HTML原代码赋给UIWebView来加载(若想在HTML上加js、css需要另外写代码)。

3.在QQmail业务中许多地方分别使用到了UIWebView和WKWebView。

在2011年,QQ邮箱ios端采用UIWebView技术开发读写信的邮件内容部分,邮件内容的本质是一段html,读信时邮件内容的加载方式是打开下载到本地数据库的html,写信则是加载本地的html。记事本的内容预览及编辑同样使用UIWebView来加载html。

webview内容
webview内容

邮件内容的预览及编辑使用UIWebView在当时已是较好的选择,过了两三年WKWebView诞生,此时读写邮件内容已经相对稳定和成熟,涉及的细节非常复杂,修改成WKWebView改动大,所需成本高,因此读写邮件内容就一直保留了UIWebView。

邮件的附件预览也是使用webview技术实现,word文档、excel文档的预览是优先使用WKWebView技术,txt及html格式的文件仍是使用UIWebView,txt与html保留使用UIWebView,是因为这两种格式的文件使用WKWebView时与使用UIWebView,编码格式更容易出现乱码。

至于读写信没有将整个界面直接做成WebView形式,是因为头部的输入框不好用UIWebView做效果,权衡之后选择了只将邮件内容部分做成WebView。下面为 UIWebView调用本地html文件例子(不是实际使用的业务代码,只是模板):

  • (void)simpleExampleTest {

 //1.创建文件路径

NSString *filePath = [[NSBundle mainBundle]pathForResource:@"readmail" ofType:@"html"];

// 2.设置html
NSString *htmlString = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil]

//3. 加载html
[myWebView loadHTMLString:htmlString baseURL:[NSURL URLWithString:filePath]];

}

读信的邮件内容中打开url链接的方式是两年前改做WKWebView,应用中的读书功能同样用WKWebView调用url的方式,选择WKWebView是因为他的页面渲染效率高,打开页面更快,用户体验更好。下面为WKWebView 调用URL的例子(不是实际使用的业务代码,只是模板):

//导入WebKit

import

  • (void)simpleExampleTest {

// 1.创建webview,并设置大小,"20"为状态栏高度

WKWebView *webView = [[WKWebView alloc] initWithFrame:CGRectMake(0, 20, self.view.frame.size.width, self.view.frame.size.height - 20)];

// 2.创建请求

NSMutableURLRequest *request =[NSMutableURLRequest requestWithURL:[NSURL URLWithString:@" https://mail.qq.com "]];

// 3.加载网页

[webView loadRequest:request];

// 4.最后将webView添加到界面

[self.view addSubview:webView];

}

4.在线文档以前是使用WKWebView,现修改为是由UIWebView调用url的形式实现, UIWebView 跟 WKWebView都可以支持js api的,js api是用来ios原生跟H5做交互的 之所以要换成WKWebView 的话 是 为了做在线文档的离线包机制、离线预览跟离线编辑功能,要支持这些功能必须要代理截获webView的http请求,UIWebView 跟 WKWebView都可以截获代理它发出的http请求,但是使用WKWebView来截获代理请求的话,会影响不那些不需要代理的请求,会使那些不代理的http请求丢失掉头部或请求body等信息

你可能感兴趣的:(基于QQ邮箱,浅谈UIWebView与WKWebView的区别)