PAWebView
PAWebView 之 cookie 管理与同步;
一. 前言
HybirdApp极速业扩展,低成本,高效率,跨平台,灵活易用,规避审核等特性深受各种平台青睐,尤其最近几年流行的响应式设计,HybirdApp都发挥淋漓尽致。如淘宝、美团、支付宝、微信都使用HybirdApp的开发模式来极速扩展业务,如支付宝和微信的支付业务、公众号、城市服务等。
HybirdApp开发主要框架有WKWebVie、UIWebView。
二. WKWebVIew介绍
UIWebView自iOS2推出,但该框架存在笨重臃肿,内存占用过高,加载速度慢等诟病,iOS8苹果公司推出WKWebView代替UIWebView。目前的iOS版本兼容基本已经抛弃了iOS7,WKWebView的优势越发明显。
1. WKWebView特点
优点:
- 高性能,60fps的滚动刷新贞率,页面加载速度有所提升
- 低内存,内存占用为UIWebView的1/4~1/3
- 稳定,长期使用性能指标基本稳定
- 易用,messageHandler的应用,丰富的手势识别,进度条监听(estimatedProgress)等新功能
- WKNavigationDelegate代理功能的细化。
- 与Safari相同的JavaScript引擎
- 支持更多的HTML5特性
缺点:
- iOS9之前不支持页面缓存管理
- 无法发送post请求
- NSProtocal的重写与WKNavigationDelegate冲突
- 版本迭代
2. WKWebView结构 image
三. PAWebView封装
PAWebView是基于WKWebView的封装,实现了JS+Native的调用,常见的网页和客户端处理,支持的系统iOS8以上以上。
架构导图
image1. cookies的同步
image-
iOS11之前通过NSURLRequest手动插入cookies,其需分别兼容PHP和JS两种网页。
-
iOS11推出WKHTTPCookieStore,其与NSHTTPCookieStorage的机制类似。
-
磁盘独立缓存WKWebView访问产生的或手动插入的cookies,当需同步cookies时,PAWebView将分别同步了磁盘和NSHTTPCookieStorage的cookies。
2. Native与JS交互
- JS通过WKScriptMessageHandler协议调用Native,WKScriptMessageHandler的使用非常的简单易用。
- OC通过脚本注入的方式调用JS(evaluateJavaScript)。
3. 兼容POST请求
- 重写loadRequest方法。
4. 缓存管理
- NSURLRequest设置缓存策略NSURLRequestCachePolicy。
- Cookies的缓存。
- 缓存的清除。
5. 手势功能
- 通过简本注入的方式处理网页元素。
- 抓取网页图片
- 识别二维码
- 抓取网页元素链接
- 抓取文本信息
四. PAWebView使用
PAWebView demo下载地址http://download.csdn.net/download/llyouss/10197978
1. 导入PAWebView
#import "PAWebView.h"
2. 使用vc加载网页
//初始化单例
PAWebView *webView = [PAWebView shareInstance];
//打开缓存
webView.openCache = YES;
//加载网页
[webView loadRequestURL:[NSURL URLWithString: @"https://www.sina.cn"]];
3. 刷新网页
//重新加载网页
[webView reload];
//无视缓存,重新加载服务器最新的网
[webView reloadFromOrigin];
4. cookies管理
//设置cookies
//webView setcookie:<#(NSHTTPCookie *)#>
//获取缓存中的cookies
[webView WKSharedHTTPCookieStorage];
// 删除缓存中所有的cookies
[webView deleteAllWKCookies];
5. 添加JS调用Native的交互事件
/* messageHander实现JS调用Native */
- (void)addMessageHander
{
//注入交互事件,实现 PAWKScriptMessageHandler 代理
[webView addScriptMessageHandlerWithName:@[@"AliPay",@"weixin"]];
//通过block的形式实现
[webView addScriptMessageHandlerWithName:@[@"AliPay",@"weixin"] observeValue:^(WKUserContentController *userContentController, WKScriptMessage *message) {
//JS调用OC处理
NSLog(@"name:%@;body:%@",message.name,message.body);
}];
}
/* 实现 PAWKScriptMessageHandler 代理 */
- (void)PAUserContentController: (WKUserContentController *) userContentController didReceiveScriptMessage:(WKScriptMessage *)message{
//JS调用OC处理
NSLog(@"name:%@;body:%@",message.name,message.body);
}
6. Native调用JS
//方式一、
[[PAWebView shareInstance] callJS:@"alert('调用JS成功')"];
//方式二、
[[PAWebView shareInstance] callJS:@"alert('调用JS成功')" handler:^(id response, NSError *error) {
NSLog(@"调用js回调事件");
}];
7. 监听二维码的识别数据
//二维码识别后返回的二维码数据
[webView notificationInfoFromQRCode:^(NSString *info) {
NSLog(@"二维码数据:%@",info);
}];
8. 缓存管理
// 清除缓存数据
[webView deleteAllWebCache];
//清除缓存所有的cookies
[webView deleteAllWKCookies];
PAWebView 实现过程请查看 demo
CSDN下载地址:http://download.csdn.net/download/llyouss/10197978
github地址:https://github.com/llyouss/PAWeView
网友评论