美文网首页
WKWebView的封装使用

WKWebView的封装使用

作者: 灬朴一生 | 来源:发表于2019-07-19 12:26 被阅读0次

概述

今天又整理出了一个WKWebView的封装工具,
并且将代码内部加入了较详细的代码注释


WX20190719-114756@2x.png

一.简单介绍
  • WKWebView 初始化
/** 初始化方法,必须用此方法
 @param frame : 坐标
 @param showAlertViewController : 传入当前控制器
 @param userAgent : 需要修改的userAgent 如果不修改传空字符串
 */
+(instancetype)initWithFrame:(CGRect)frame showAlertViewController:(UIViewController *)showAlertViewController userAgent:(NSString *)userAgent;
  • WKWebView 进度条使用
/** 进度条颜色 默认红色*/
@property (nonatomic, strong) UIColor *progressTintColor;
/** 进度条背景 默认透明*/
@property (nonatomic, strong) UIColor *trackTintColor;
  • WKWebView 网页加载
/** 加载网页
 @param urlString : 路径或者网址
  将会自动辨别加载
 */
-(void)loadUrlString:(NSString *)urlString;
  • WKWebView 监听HMTL方法
/** 监听的方法名
 响应: LLWebViewUserContentController 此方法
 */
@property (nonatomic, strong) NSString *methodName;

#pragma mark 代理响应方法
- (void)LLWebViewUserContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message;
  • WKWebView 回调方法名
/** HTML响应Alert时 返回内容的方法名*/
@property (nonatomic, strong) NSString *alertMethodName;
/**
// 默认监听一个传值方法
if ([webView.alertMethodName isEqualToString:@"(null)"] || !webView.alertMethodName || [webView.alertMethodName length] == 0) {
  webView.alertMethodName = @"setResponseObj";
}
*/
  • WKWebView alert,comfirm,prompt方法的拦截
#pragma mark 响应时发送的json格式
{
  "title":"确定要提交吗?",
  "message":"内容",
  "buttonCount":[
      {"title":"取消","buttonStyle":"1"},
      {"title":"确定","buttonStyle":"0"}],
  "functionType":"标识",
  "placeholder":""
}
-----------------------------------------
#pragma mark 模型LLHtmlModel
/** 弹窗标题*/
@property (nonatomic, strong) NSString *title;

/** 弹窗内容*/
@property (nonatomic, strong) NSString *message;

/** 按钮数组及内容
 title : 按钮文字
 buttonStyle : 类型
 */
@property (nonatomic, strong) NSArray *buttonCount;

/** 作为一个方法标识*/
@property (nonatomic, strong) NSString *functionType;

/** 输入框提示语*/
@property (nonatomic, strong) NSString *placeholder;

/** 初始化 方法*/
+(instancetype)initWithModel:(NSDictionary *)dict;
-----------------------------------------
#pragma mark 回调时发送的json
@{
  @"equipment" : @"iOS", // 传入来源
  @"functionType" : functionType,// 传过来的标识
  @"version" : LLWebViewAppVersion, // 版本号
  @"selected": buttonTitle, // 按钮名字
  @"methodName" : methodName, // 传入一个调用HTML的方法名,便于接收判断进入其他方法
  @"message" : message // 回传信息,比如输入框中的内容
}
  • WKWebView 提供给HTML调用的类
    HTML 通过此种json,调用iOS提供的类,获取所需数据或调用类中的方法
{
  "className":"LLParams",
  "method":{
    "methodName":"getParams",
    "setMethodName":"setResponseObj"
   }
}
// HTML 调用 iOS 类, 获取参数
-(void)getHTMLJSONWithDict:(NSDictionary *)dict;
/**
    将类名: LLParams
    方法名: getParams
    告知HTML 调用时使用
 */
-(NSDictionary *)getParams{
  NSDictionary *dict = @{
    @"token" : @"6666666666",
    @"version" : LLWebViewAppVersion
  };    
  return dict;
}
  • WKWebView 动态跳转控制器
    HTML 通过此种json,跳转方法,并且可以调用B控制器的方法
{
  // 控制器名
  "className":"CViewController",
  "method":{
    // 方法名
    "methodName":"refresh",
    // 返回值方式  
    "methodType":"void",
    // 传入参数
    "methodParameter":""
  },
  "properties":{
      // 信息ID
      "msgId":"1223030330",
      // 信息类型
      "msgType":"3"
  }
}
- (void)jumpWithDict:(NSDictionary *)dict navController:(UINavigationController *)navController

关于WKWebView中,设置局部UserAgent问题还没有响应很好的解决办法,如果项目中需要多次设置,还需再完善
另外唤起系统相机/相册功能暂时未能写完,会将持续完善

相关文章

网友评论

      本文标题:WKWebView的封装使用

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