zoukankan      html  css  js  c++  java
  • WKWebView使用

    WKWebView比之之前使用的UIWebView更加具有优势,UIWebView更加的笨重,UIWebView占用更多的内存,且内存的峰值更加的夸张,WKWebView加载的速度也更快,而且其更多的支持HTML5的特性,官方宣称的高达60fps的公洞刷新率以及内置的手势。

    以下是一些WKWebView的一些使用方法及代理方法

    加载链接和UIWebView类似

    懒加载方法:

    - (WKWebView *)webView {
        if (_webView == nil) {
            // js配置
            WKUserContentController *userContentController = [[WKUserContentController alloc] init];
            [userContentController addScriptMessageHandler:self name:@"webViewLoadStart"];
            [userContentController addScriptMessageHandler:self name:@"webViewLoadFinish"];
            [userContentController addScriptMessageHandler:self name:@"webViewLogout"];
            [userContentController addScriptMessageHandler:self name:@"webViewSuccess"];

            // WKWebView的配置
            WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init];
            configuration.userContentController = userContentController;
            
            // 显示WKWebView
            _webView = [[WKWebView alloc] initWithFrame:self.view.frame configuration:configuration];
            _webView.UIDelegate = self; // 设置WKUIDelegate代理
            _webView.navigationDelegate = self; // 设置WKNavigationDelegate代理
            [self.view addSubview:_webView];
        }
        return _webView;
    }

    在其中的

    - (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message方法中主要是收到JS的回执脚本就会运行一次

    可以在这个方法里面进行app和js的交互

    下面是WKUIDelegate一些代理的方法,可以用于输入框,弹出窗的使用

    和UIWebView类似的加载,成功,失败的代理方法类似

    /// 1 页面开始加载
    - (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation;
    /// 2 开始获取到网页内容时返回
    - (void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation;
    /// 3 页面加载完成之后调用
    - (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation;
    /// 4 页面加载失败时调用
    - (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation;

    #pragma mark - WKUIDelegate
    #pragma mark alert弹出框
    - (void)webView:(WKWebView *)webView runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(void))completionHandler {
        NSLog(@"%s", __FUNCTION__);
        // 确定按钮
        UIAlertAction *alertAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
            completionHandler();
        }];
        // alert弹出框
        UIAlertController *alertController = [UIAlertController alertControllerWithTitle:message message:nil preferredStyle:UIAlertControllerStyleAlert];
        [alertController addAction:alertAction];
        [self presentViewController:alertController animated:YES completion:nil];
    }

    #pragma mark Confirm选择框
    - (void)webView:(WKWebView *)webView runJavaScriptConfirmPanelWithMessage:(nonnull NSString *)message initiatedByFrame:(nonnull WKFrameInfo *)frame completionHandler:(nonnull void (^)(BOOL))completionHandler {
        NSLog(@"%s", __FUNCTION__);
        // 按钮
        UIAlertAction *alertActionCancel = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
            // 返回用户选择的信息
            completionHandler(NO);
        }];
        UIAlertAction *alertActionOK = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
            completionHandler(YES);
        }];
        // alert弹出框
        UIAlertController *alertController = [UIAlertController alertControllerWithTitle:message message:nil preferredStyle:UIAlertControllerStyleAlert];
        [alertController addAction:alertActionCancel];
        [alertController addAction:alertActionOK];
        [self presentViewController:alertController animated:YES completion:nil];
    }

    #pragma mark TextInput输入框
    - (void)webView:(WKWebView *)webView runJavaScriptTextInputPanelWithPrompt:(nonnull NSString *)prompt defaultText:(nullable NSString *)defaultText initiatedByFrame:(nonnull WKFrameInfo *)frame completionHandler:(nonnull void (^)(NSString * _Nullable))completionHandler {
        NSLog(@"%s",__FUNCTION__);
        // alert弹出框
        UIAlertController *alertController = [UIAlertController alertControllerWithTitle:prompt message:nil preferredStyle:UIAlertControllerStyleAlert];
        // 输入框
        [alertController addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) {
            textField.placeholder = defaultText;
        }];
        // 确定按钮
        [alertController addAction:[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
            // 返回用户输入的信息
            UITextField *textField = alertController.textFields.firstObject;
            completionHandler(textField.text);
        }]];
        // 显示
        [self presentViewController:alertController animated:YES completion:nil];
    }

  • 相关阅读:
    java01 java基础知识
    01 开发准备 启动PHP服务与环境配置
    Axure 9.0 使用教程2-函数分类
    Axure 9.0 使用教程1-软件概述
    Python 字符串 列表 元组 字典 集合学习总结
    Python 函数定义 调用 迭代器 生成器 递归和推导式
    Python习题
    Python 条件 循环 及其他语句
    Python 字典
    Python 字符串
  • 原文地址:https://www.cnblogs.com/Acee/p/5305535.html
Copyright © 2011-2022 走看看