我在 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);
.
.
.
}
其中 stringByEvaluatingJavaScriptFromString 函数在 WKWebView 类别中实现:
- (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 有什么问题?
谢谢 !