PAWebView 0.2.1

PAWebView 0.2.1

llyouss 维护。



PAWebView 0.2.1

  • 作者
  • Luoshengyou

PAWebView。

适用于 iOS 的组件 WebView

介绍

PAWebView 是一个基于 iOS 8.0 中的现代 WebKit 框架 WKWebView 构建的扩展 WebView。它为开发复杂的 iOS 原生或混合应用程序提供了快速的 Web 功能。

示例项目

有关如何使用 PAWebView 的完整示例,请参阅示例项目。

PAWeView 类结构图

Image text

最低要求

  • 部署:iOS 8.0

使用

  • #import "PAWebView.h"
  • plist
     <key>UIViewControllerBasedStatusBarAppearance</key>
      <false/>
     <key>UIStatusBarStyle</key>
     <string>UIStatusBarStyleDefault</string>
     <key>NSPhotoLibraryUsageDescription</key>
     <string>访问相册</string>
     <key>NSAppTransportSecurity</key>
     <dict>
      <key>NSAllowsArbitraryLoads</key>
      <true/>
     </dict>
    
  • 加载中
    //初始化单例  
     PAWebView *webView = [PAWebView shareInstance];  
     
    //加载网页  
    [webView loadRequestURL:[NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://www.sina.cn"] cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:20.0f]];
     [self.navigationController pushViewController:webView animated:YES];
     
     //缓存沿用了 NSURLRequest 的缓存机制,用户可以自定义设置;
    typedef NS_ENUM(NSUInteger, NSURLRequestCachePolicy)
    {
        NSURLRequestUseProtocolCachePolicy = 0, //默认的缓存策略
    
        NSURLRequestReloadIgnoringLocalCacheData = 1, //忽略缓存,从服务端加载数据;
        NSURLRequestReloadIgnoringLocalAndRemoteCacheData = 4, // Unimplemented
        NSURLRequestReloadIgnoringCacheData = NSURLRequestReloadIgnoringLocalCacheData,
    
        NSURLRequestReturnCacheDataElseLoad = 2,
        NSURLRequestReturnCacheDataDontLoad = 3,
    
        NSURLRequestReloadRevalidatingCacheData = 5, // Unimplemented
    };
     
    
  • 刷新
 //重新加载网页  
  [webView reload];   
 //无视缓存,重新加载服务器最新的网  
  [webView reloadFromOrigin]; 

  • JS->本地
/* 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);  
} 
  • 本地->JS
 //方式一、  
  [[PAWebView shareInstance] callJS:@"alert('调用JS成功')"];  
 //方式二、  
  [[PAWebView shareInstance] callJS:@"alert('调用JS成功')" handler:^(id response, NSError *error) {  
       NSLog(@"调用js回调事件");  
  }]; 
  • Cookie 管理器
/**
 读取本地磁盘的cookies,包括WKWebview的cookies和sharedHTTPCookieStorage存储的cookies

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

/**
 提供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;

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

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

  • 清除缓存

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

  • 清除 backForwardList 列表
/*清除backForwardList 列表*/
- (void)clearBackForwardList;