美文网首页首页投稿(暂停使用,暂停投稿)iOS OC 学习手册
WkWebView 详解(js交互、进度条、刷新、左右滑动)

WkWebView 详解(js交互、进度条、刷新、左右滑动)

作者: 孤独的剑客 | 来源:发表于2016-07-16 11:09 被阅读5256次

    WKWebView 是苹果在 iOS 8 中引入的新组件,目的是给出一个新的高性能的 Web View 解决方案,摆脱过去 UIWebView 的老旧笨重特别是内存占用量巨大的问题。它的优点在于占用更少的内存,处理速度更快。不过有点一点不像webview每次打开网页没有缓存,如果用户要配置一些个人的信息在请求里面,需要配置:
    WKWebViewConfiguration 这个类。

    js交互

    <p></p><pre><code>
    // js配置

        WKWebViewConfiguration*config=[[WKWebViewConfiguration alloc] init];
        // 设置偏好设置
        config.preferences = [[WKPreferences alloc] init];
        // 默认为0
        config.preferences.minimumFontSize = 10;
        // 默认认为YES
        config.preferences.javaScriptEnabled = YES;
        // 在iOS上默认为NO,表示不能自动通过窗口打开
        config.preferences.javaScriptCanOpenWindowsAutomatically = NO;
        config.userContentController = [[WKUserContentController alloc] init];
        
        // 注入JS对象名称AppModel,当JS通过AppModel来调用时,
        // 我们可以在WKScriptMessageHandler代理中接收到
        [config.userContentController addScriptMessageHandler:self name:@"MModel"];
        _wkWebView = [[WKWebView alloc] initWithFrame:self.view.bounds configuration:config];
    

    </code></pre>

    进度条

    <p></p><pre><code>
    // 计算wkWebView进度条

    • (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context{

      if (_isLoad) {
      return;
      }

      if ([keyPath isEqualToString:@"estimatedProgress"]) {
      self.progresslayer.opacity = 1;
      CGFloat new = [[change objectForKey:NSKeyValueChangeNewKey] doubleValue];
      CGFloat old = [[change objectForKey:NSKeyValueChangeOldKey] doubleValue];
      if (new < old) {
      return;
      }
      self.progresslayer.frame = CGRectMake(0, 0, self.view.bounds.size.width * [change[@"new"] floatValue], 3);
      if ([change[@"new"] floatValue] == 1) {
      dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(.4 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
      self.progresslayer.opacity = 0;
      });
      dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
      self.progresslayer.frame = CGRectMake(0, 0, 0, 3);
      });
      }
      }

    }
    </code></pre>

    刷新

    <p></p><pre><code>
    // 增加拉刷新

    MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(onHeader)];
    [header setTitle:@"下拉刷新" forState:MJRefreshStatePulling];
    header.lastUpdatedTimeLabel.hidden = YES;
    _wkWebView.scrollView.mj_header = header;
    

    </code></pre>

    左右滑动

    <p></p><pre><code>
    // 浏览器内左右滑动

    _wkWebView.allowsBackForwardNavigationGestures = YES;
    

    </code></pre>

    [下载地址]https://git.oschina.net/mrj_mrj/WkWebView.git

    相关文章

      网友评论

        本文标题:WkWebView 详解(js交互、进度条、刷新、左右滑动)

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