WKWebView 画面描画後にコンテンツサイズを取得するObjective-C

WKWebViewでコンテンツサイズの取得をしたかった。
画面描画が終了すると webView: didFinishNavigation: が実行されるらしい。なので、コンテンツサイズ取得はそこで行う。
コンテンツサイズの取得は、javascriptを実行させることで取得できるみたいです。

javascriptを実行させる

下記でjavascriptを実行できるようです。

- (void)evaluateJavaScript:(NSString *)javaScriptString completionHandler:(void (^)(id, NSError *error))completionHandler;

コンテンツサイズを取得するjavascriptは下記で大丈夫だと思います。

document.documentElement.offsetWidth //横幅
document.documentElement.offsetHeight //縦幅

試してみた

evaluateJavaScript: completionHandler: を2回実行しているのは微妙な感じですが、取り敢えずこんな感じで。

// 画面描画終了後 webView: didFinishNavigation: が呼び出される
- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation {
    // 横幅取得
    [self evaluateJavaScript:@"document.documentElement.offsetWidth" completionHandler:^(id documentWidth, NSError *error){
        CGFloat width = [documentWidth floatValue]; 
        // 縦幅取得
        [self.webView evaluateJavaScript:@"document.documentElement.offsetHeight" completionHandler:^(id documentHeight, NSError *error){
            CGFloat height = [documentHeight floatValue];
            // ↓以降で取得した幅で何かを行う↓
        }];
    }];
}