计算WKWebView内容高度

作者: 波波熊洛夫 | 来源:发表于2016-06-30 11:01 被阅读6192次
    - (void)viewDidLoad {    
        [self.webView.scrollView addObserver:self forKeyPath:@"contentSize" options:NSKeyValueObservingOptionNew context:nil];
    }
    
    - (void)dealloc {
        [self.webView.scrollView removeObserver:self forKeyPath:@"contentSize" context:nil];
    }
    
    - (void)observeValueForKeyPath:(NSString *)keyPath
                          ofObject:(id)object
                            change:(NSDictionary *)change
                           context:(void *)context
    {
        if (object == self.webView.scrollView && [keyPath isEqual:@"contentSize"]) {
            // we are here because the contentSize of the WebView's scrollview changed.
            
            UIScrollView *scrollView = self.webView.scrollView;
            NSLog(@"New contentSize: %f x %f", scrollView.contentSize.width, scrollView.contentSize.height);
        }
    }
    

    2017/7/14 更新:
    碰到KVO无限触发可以用js方法获取高度

    - (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation {
        [webView evaluateJavaScript:@"Math.max(document.body.scrollHeight, document.body.offsetHeight, document.documentElement.clientHeight, document.documentElement.scrollHeight, document.documentElement.offsetHeight)"
                  completionHandler:^(id _Nullable result, NSError * _Nullable error) {
                      if (!error) {
                          NSNumber *height = result;
                          // do with the height
    
                      }
                  }];
    }
    

    相关文章

      网友评论

      • LD_左岸:楼主 碰到KVO无限触发可以用js方法获取高度 这个js不是百分百有效
        (lldb) po error
        Error Domain=WKErrorDomain Code=4 "A JavaScript exception occurred" UserInfo={NSLocalizedDescription=A JavaScript exception occurred}
      • FengxinLi:请问一下楼主如果一个网页是 左右可以切换的 高度怎么监听呢?以及改变 比如下面这个网站主页和微博二个高度不一样没法设置不一样的高度 https://m.weibo.cn/u/5764750636?uid=5764750636&luicode=10000011&lfid=2304135764750636_-_WEIBO_SECOND_PROFILE_MORE_WEIBO
      • Barbie526:请问, 高度一直在增长, 是什么原因呢?
        Michaelin:@聆心倾听 后来有解决方案了吗?试过contentsize的height - 1作为frame新的高,这样就不会持续增长 但是不知道原因,感觉很不靠谱。
        Barbie526:@天上飞的狒狒 不是, 我的意思是无限增长. 嗖嗖嗖嗖的增长:joy:
        天上飞的狒狒:是因为你监测的方法每次有图片加载出来会增加一次的
      • 天上飞的狒狒:楼主你好,有没有遇到高度是显示高度的3倍的现象?
        贾小敏1234:一直不停的在走监听是怎么回事
        Jack_Liao:@天上飞的狒狒 我就是遇到了,你解决了没有啊?我也很纠结,如果知道解决方法可以告诉我吗?我的企鹅937902524。我贴出我的方法啊:
        - (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation{
        __block CGFloat webViewHeight;
        //获取内容实际高度(像素)
        [webView evaluateJavaScript:@"document.body.offsetHeight" completionHandler:^(id _Nullable result,NSError * _Nullable error) {
        //获取页面高度,并重置webview的frame
        webViewHeight = [result doubleValue];
        NSLog(@"%f",webViewHeight);
        dispatch_async(dispatch_get_main_queue(), ^{
        [self layoutWithWebHeight:webViewHeight];
        });
        }];

        NSLog(@"结束加载");

        }
        天上飞的狒狒:就是下面有一大片空白的现象
      • d287a7fc7464:不晓得为什么这样写,dealloc方法都不走
        一个啥子都不会滴程序媛:@JohnMagic 我的这个没有注入 怎么也不走呢
        一个啥子都不会滴程序媛:您好,我的也不走,请问您解决了吗
        JohnMagic:你注入js函数,没有 remove吧,内存泄露了~

      本文标题:计算WKWebView内容高度

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