zoukankan      html  css  js  c++  java
  • WKWebView简单使用和常用使用场景

    转自http://www.jianshu.com/p/8f6d527f13bc

    WKWebView的特点:

    • 性能高,稳定性好,占用的内存比较小,
    • 支持JS交互
    • 支持HTML5 新特性
    • 可以添加进度条(然并卵,不好用,还是习惯第三方的)。
    • 支持内建手势,
    • 据说高达60fps的刷新频率(不卡)

    创建时候很简单

    1. 导入Wbkit这个类库(WKWebVeiw包含在里面的)

    2. 遵守协议(一般前两个就行啦,第三个主要是与JS相关的东西,这个协议中包含一个必须实现的方法,这个方法是提高App与web端交互的关键,它可以直接将接收到的JS脚本转为OC或Swift对象--网上大神说的,我没用过。)

    @interface ViewController : UIViewController<WKNavigationDelegate,WKUIDelegate,WKScriptMessageHandler>

    3.创建个WebView的对象

        WKWebView *webView = [[WKWebView alloc] initWithFrame:self.view.bounds];
        [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"https://www.baidu.com"]]];
        [self.view addSubview:webView];

    这里有个注意点,网址一定要写完整,加上https://我刚开始懒,没有加,屋里怎么试都加载不出来,显示个白屏!!血的教训啊!!

    WKWebView有两个委托

    WKWebView代理有两个,是WKNavigationDelegateWKUIDelegate,可以根据需要来决定用那些方法(当然使用之前不要忘了遵守协议)。

    他们两个的代理方法有好多个,不过有的不常用就不写了,需要的自己点进去看一下就行啦。。。

    1. WKNavigationDelegate来追踪加载过程

    // 页面开始加载时调用
    - (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation;
    // 当内容开始返回时调用
    - (void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation;
    // 页面加载完成之后调用
    - (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation;
    // 页面加载失败时调用
    - (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation;

    WKNavigtionDelegate来进行页面跳转

    // 接收到服务器跳转请求之后再执行
    - (void)webView:(WKWebView *)webView didReceiveServerRedirectForProvisionalNavigation:(WKNavigation *)navigation;
    // 在收到响应后,决定是否跳转
    - (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler;
    // 在发送请求之前,决定是否跳转
    - (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler;

    2. WKUIDelegate

    //1.创建一个新的WebVeiw
    - (nullable WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures;
    //2.WebVeiw关闭(9.0中的新方法)
    - (void)webViewDidClose:(WKWebView *)webView NS_AVAILABLE(10_11, 9_0);
    //3.显示一个JS的Alert(与JS交互)
    - (void)webView:(WKWebView *)webView runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(void))completionHandler;
    //4.弹出一个输入框(与JS交互的)
    - (void)webView:(WKWebView *)webView runJavaScriptTextInputPanelWithPrompt:(NSString *)prompt defaultText:(nullable NSString *)defaultText initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(NSString * __nullable result))completionHandler;
    //5.显示一个确认框(JS的)
    - (void)webView:(WKWebView *)webView runJavaScriptConfirmPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(BOOL result))completionHandler;

    (PS:WKUIDelegate主要是做跟网页交互的,可以显示javascript的一些alert或者Action,看起来跟自己做的一样的.)

    暂时就用到了这么多,这个demo纯粹是为了初学试验的,具体复杂的使用方法等以后遇到了再说啊!!!!


    这篇文章写得非常详细,大家也可以参考下


    2016.11.26补充

    补充加载页面后自动关闭的问题

    问题描述,我加载一web页面后,进行各种操作,比说我充值,什么的,然后想要在充值提出成功后自顶关闭这个web页面回到上一层或者返回到某一个界面,就用下面的方法,一般判断URL 包含的字符串都是后台给定的,在这里只需要判断就好了!

    //**WKNavigationDelegate**里面的代理方法(上面有)
    - (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler{
        //获取请求的url路径.
        NSString *requestString = navigationResponse.response.URL.absoluteString;
        WKLog(@"requestString:%@",requestString);
        // 遇到要做出改变的字符串
        NSString *subStr = @"www.baidu.com";
        if ([requestString rangeOfString:subStr].location != NSNotFound) {
            WKLog(@"这个字符串中有subStr");
            //回调的URL中如果含有百度,就直接返回,也就是关闭了webView界面
            [self.navigationController  popViewControllerAnimated:YES];
        }
    
        decisionHandler(WKNavigationResponsePolicyAllow);
    
    }

     

  • 相关阅读:
    学习Android有感!
    使用PHP-Barcode轻松生成条形码(一)
    php利用redis实现分页列表,新增,删除功能
    JS验证input输入框(字母,数字,符号,中文)正则实现
    mac 安装swoole扩展
    git 配置本地SSH秘钥
    lnmp 一键安装
    lnmp php版本升级
    NATAPP内网穿透,本地进行微信开发,支付开发,对象存储回调信息
    微信公众号二维码
  • 原文地址:https://www.cnblogs.com/liuting-1204/p/6534745.html
Copyright © 2011-2022 走看看