美文网首页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