美文网首页iOS技术点iOS开发者js交互
iOS-PAWebVIew基于WKWebView封装的框架

iOS-PAWebVIew基于WKWebView封装的框架

作者: llyouss | 来源:发表于2018-01-10 15:30 被阅读363次

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

    三. PAWebView封装

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

           github下载请点击这里。

    架构导图

    image

    1. 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

    相关文章

      网友评论

        本文标题:iOS-PAWebVIew基于WKWebView封装的框架

        本文链接:https://www.haomeiwen.com/subject/zeyonxtx.html