iOS-PAWebVIew基于WKWebView封装的框架

 

PAWebView

PAWebView 之 cookie 管理与同步;

PAWebView 之长按手势;

PAWebView 之POST请求;

 

一. 前言

      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结构

三. PAWebView封装

      PAWebView是基于WKWebView的封装,实现了JS+Native的调用,常见的网页和客户端处理,支持的系统iOS8以上以上。

github下载请点击这里。

架构导图

 

1.  cookies的同步

 

           

 

  •  iOS11之前通过NSURLRequest手动插入cookies,其需分别兼容PHPJS两种网页。
  •  iOS11推出WKHTTPCookieStore,其与NSHTTPCookieStorage的机制类似。
  •  磁盘独立缓存WKWebView访问产生的或手动插入的cookies,当需同步cookies时,PAWebView将分别同步了磁盘和NSHTTPCookieStoragecookies

2.  Native与JS交互

  •  JS通过WKScriptMessageHandler协议调用NativeWKScriptMessageHandler的使用非常的简单易用。
  •  OC通过脚本注入的方式调用JS(evaluateJavaScript)。

 3.  兼容POST请求

  •  重写loadRequest方法。

 4.  缓存管理

  •  NSURLRequest设置缓存策略NSURLRequestCachePolicy。
  •  Cookies的缓存。
  •  缓存的清除。

5.  手势功能

  •  通过简本注入的方式处理网页元素。
  •  抓取网页图片
  •  识别二维码
  •  抓取网页元素链接
  •  抓取文本信息

6.清空 BackForwardList 列表

  •     按需求清空 backForwardList

 

四. PAWebView使用

PAWebView demo下载地址http://download.csdn.net/download/llyouss/10197978

1.  导入PAWebView

#import "PAWebView.h"
 

 

2.  使用vc加载网页

 //初始化单例
 PAWebView *webView = [PAWebView shareInstance];

 //加载网页
 [webView loadRequestURL:[NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://www.sina.cn"] cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:20.0f]];
 

 

3.  刷新网页


/** 重新加载webview */
- (void)reload;

/** 重新加载网页,忽略缓存 */
- (void)reloadFromOrigin;
 

4.  cookies管理

/**
  提供cookies插入,用于loadRequest 网页之前

 @param cookie NSHTTPCookie 类型
  cookie 需要设置 cookie 的name,value,domain,expiresDate(过期时间,当不设置过期时间,cookie将不会自动清除);
  cookie 设置expiresDate时使用 [cookieProperties setObject:expiresDate forKey:NSHTTPCookieExpires];将不起作用,原因不明;使用 cookieProperties[expiresDate] = expiresDate; 设置cookies 设置时间。
 */
- (void)setCookie:(NSHTTPCookie *)cookie;


/**
  读取本地磁盘的cookies,包括WKWebview的cookies和sharedHTTPCookieStorage存储的cookies

 @return 返回包含所有的cookies的数组;
 当系统低于 iOS11 时,cookies 将同步NSHTTPCookieStorage的cookies,当系统大于iOS11时,cookies 将同步
 */
- (NSMutableArray *)WKSharedHTTPCookieStorage;

/** 删除单个cookie */
- (void)deleteWKCookie:(NSHTTPCookie *)cookie completionHandler:(nullable void (^)(void))completionHandler;


/** 删除域名下的所有的cookie */
- (void)deleteWKCookiesByHost:(NSURL *)host completionHandler:(nullable void (^)(void))completionHandler;


/** 清除所有的cookies */
- (void)clearWKCookies;

5.  添加JS调用Native的交互事件

 方式一:block形式
/* 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.  缓存管理

/** 清除所有的cookies */
- (void)clearWKCookies;

/** 清除所有缓存(cookie除外) */
- (void)clearWebCacheFinish:(void(^)(BOOL finish,NSError *error))block;

//PAWebView 缓存沿用了 NSURLRequest 的缓存机制,用户可以自定义设置;

typedef NS_ENUM(NSUInteger, NSURLRequestCachePolicy)
{
    NSURLRequestUseProtocolCachePolicy = 0, //默认的缓存策略

    NSURLRequestReloadIgnoringLocalCacheData = 1, //忽略缓存,从服务端加载数据;
    NSURLRequestReloadIgnoringLocalAndRemoteCacheData = 4, // Unimplemented
    NSURLRequestReloadIgnoringCacheData = NSURLRequestReloadIgnoringLocalCacheData,

    NSURLRequestReturnCacheDataElseLoad = 2,
    NSURLRequestReturnCacheDataDontLoad = 3,

    NSURLRequestReloadRevalidatingCacheData = 5, // Unimplemented
};

 

 

PAWebView 实现过程请查看 demo ,下载地址:http://download.csdn.net/download/llyouss/10197978

 

 

github: https://github.com/llyouss/PAWeView

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值