需求:
如果需要在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文件轉(zhuǎn)為 Data 數(shù)據(jù)
NSData *jsData=[NSData dataWithContentsOfFile:jsPath];
///3. 將 Data 數(shù)據(jù)轉(zhuǎn)字符串
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創(chuàng)建JS腳本, 并通過WKWebViewConfiguration進行JS文件的引入入:
/// 創(chuàng)建WebView配置
WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init];
/// 獲取JS文件路徑
NSString *jsPath = [[NSBundle mainBundle] pathForResource:@"common" ofType:@"js"];
/// 獲取js數(shù)據(jù)
NSData *jsData=[NSData dataWithContentsOfFile:jsPath];
/// 轉(zhuǎn)js字符串類型
NSString *jsString = [[NSString alloc]initWithData:jsData encoding:NSUTF8StringEncoding];
/// 創(chuàng)建WKUserScript
WKUserScript *userScript = [[WKUserScript alloc]initWithSource:jsString injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:YES];
/// 注入到configuration配置內(nèi)
[configuration.userContentController addUserScript:userScript];
/// 創(chuàng)建WebView
WKWebView *webView = [[WKWebView alloc] initWithFrame:frame configuration:configuration];