美文网首页iOS_面试相关
iOS | WKWebView 动态加载本地JS库文件

iOS | WKWebView 动态加载本地JS库文件

作者: Leon_520 | 来源:发表于2019-03-20 09:14 被阅读0次

需求:

如果需要在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];

相关文章

网友评论

    本文标题:iOS | WKWebView 动态加载本地JS库文件

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