gpt4 book ai didi

javascript - WKWebView 评估 JavaScript 返回值

转载 作者:IT王子 更新时间:2023-10-29 03:21:29 26 4
gpt4 key购买 nike

我需要更改一个函数来评估从 UIWebView 到 WKWebView 的 JavaScript。我需要在此函数中返回评估结果。

现在,我调用:

[wkWebView evaluateJavaScript:call completionHandler:^(NSString *result, NSError *error)
{
NSLog(@"Error %@",error);
NSLog(@"Result %@",result);
}];

但我需要得到像返回值这样的结果,就像在 UIWebView 中一样。您能提出解决方案吗?

最佳答案

更新:这不再适用于 iOS 12+。


我通过等待结果直到返回结果值来解决这个问题。

我使用 NSRunLoop 等待,但我不确定这是不是最好的方法...

这是我现在使用的类别扩展源代码:

@interface WKWebView(SynchronousEvaluateJavaScript)
- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script;
@end

@implementation WKWebView(SynchronousEvaluateJavaScript)

- (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;
}
@end

示例代码:

NSString *userAgent = [_webView stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"];

NSLog(@"userAgent: %@", userAgent);

关于javascript - WKWebView 评估 JavaScript 返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26778955/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com