1

WKWebView にロードする次の HTML 構造があります。

<html>
<body>
...
//CSS code
...
<div id='main-div'>
<div id='inner-div'>
...
//Actual contents to display
...
</div>
</div>
...
//Javascript code
...
</body>
</html>

WKWebview の文字列として HTML の上に読み込んでいます。

[webView loadHTMLString:htmlString baseURL:nil]

内部 div の高さ (コンテンツに合わせて CSS に基づいて自動的にサイズ変更される) を次のように計算します。

- (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation
{
NSString *height = [webView stringByEvaluatingJavaScriptFromString:@"document.getElementById('inner-div').offsetHeight;"];

NSLog(@"Height :: %@",height);
.
.
.     
}

WKWebView カテゴリに実装されている stringByEvaluatingJavaScriptFromString 関数:

- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script {
    __block NSString *resultString = nil;
    __block BOOL finished = NO;

    [self evaluateJavaScript:script completionHandler:^(id result, NSError *error) {
        if (error == nil) {
            if (result != nil) {
                resultString = [NSString stringWithFormat:@"%@", result];
            }
        } else {
            NSLog(@"evaluateJavaScript error : %@", error.localizedDescription);
        }
        finished = YES;
    }];

    while (!finished)
    {
        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
    }

    return resultString;
}

私の問題は、エラーが発生することです:「JavaScript 例外が発生しました」、または stringByEvaluatingJavaScriptFromString を使用すると、値が正しくない場合があります。ただし、UIWebView で同じ高さの JavaScript を評価してみましたが、正しい値が返されました。WKWebview の何が問題になっていますか?

ありがとう !

4

0 に答える 0