概述
今天又整理出了一个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
问题还没有响应很好的解决办法,如果项目中需要多次设置,还需再完善
另外唤起系统相机/相册
功能暂时未能写完,会将持续完善
-
下载地址
GitHub-WKWebView
网友评论