我需要更改一个函数来评估JavaScript从UIWebView到WKWebView。我需要返回这个函数的评估结果。
现在,我打电话:
[wkWebView evaluateJavaScript:call completionHandler:^(NSString *result, NSError *error)
{
NSLog(@"Error %@",error);
NSLog(@"Result %@",result);
}];
但是我需要得到像UIWebView
那样的返回值,你能建议一个解决方案吗?
9条答案
按热度按时间nzkunb0c1#
我通过等待result直到返回result值来解决这个问题。
我使用NSRunLoop来等待,但我不确定这是不是最好的方法...
下面是我现在使用的类别扩展源代码:
示例代码:
cs7cruho2#
如果javascript代码引发NSError,此解决方案也有效:
kkbh8khc3#
我刚刚遇到了同样的问题,并为它写了一个小Swift(3.0)WKWebView扩展,我想我可以分享它:
kmb7vmvb4#
根据mort@3m的回答,下面是一个与Swift 5一起工作的WKWebView扩展。
tyu7yeag5#
我发现如果没有异常的话,在你注入的javascript中final语句的值是作为id参数传递给completion函数的返回值。
5q4ezhmt6#
基于mort@3m的评论。这是Objective-C的工作版本。
np8igboo7#
只有这个工作,上面的答案对我不起作用.
jpfvwuh48#
雨燕5.7
应该够了
没有必要写任何额外的仪式和样板代码以外的。
目前不推荐,但如果您更喜欢async/await:
(注意,如果js中没有指定返回值,它将由于Swift内部错误而崩溃,我猜是这样。我不确定原因)
smtd7mpg9#
可以使用调度信号量,在**iOS12 +**上工作
示例: