需求:
如果需要在WKWebView加载JS库,或者JS文件,有以下2种方案:
方式一.
可以在 web 页面加载前/后运行JS库, 代码如下:
- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation{
// 加载 js 库写在这里
/// 1. 获取本地JS文件路径
NSString *jsPath = [[NSBundle mainBundle] pathForResource:@"common" ofType:@"js"];
///2. 将JS文件转为 Data 数据
NSData *jsData=[NSData dataWithContentsOfFile:jsPath];
///3. 将 Data 数据转字符串
NSString *jsString = [[NSString alloc]initWithData:jsData encoding:NSUTF8StringEncoding];
///4. 运行JS字符串
[webView evaluateJavaScript:jsString completionHandler:^(id _Nullable obj, NSError * _Nullable error) {
// 返回运行JS返回值
NSLog(@"%@",obj);
// 错误信息
NSLog(@"%@",error);
}];
}
方式二.
通过WKUserScript
创建JS脚本, 并通过WKWebViewConfiguration
进行JS文件的引入入:
/// 创建WebView配置
WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init];
/// 获取JS文件路径
NSString *jsPath = [[NSBundle mainBundle] pathForResource:@"common" ofType:@"js"];
/// 获取js数据
NSData *jsData=[NSData dataWithContentsOfFile:jsPath];
/// 转js字符串类型
NSString *jsString = [[NSString alloc]initWithData:jsData encoding:NSUTF8StringEncoding];
/// 创建WKUserScript
WKUserScript *userScript = [[WKUserScript alloc]initWithSource:jsString injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:YES];
/// 注入到configuration配置内
[configuration.userContentController addUserScript:userScript];
/// 创建WebView
WKWebView *webView = [[WKWebView alloc] initWithFrame:frame configuration:configuration];
网友评论