我从 WKWebView 触发 js 并在 block 函数中获取结果。在 block 函数中,我得到了正确的数据。但是,当我将此数据分配给外部的外部变量时,我总是得到 nil 值。
- (id)triggerJS:(NSString*)js { NSLog(@"JS = %@",js); __block id resultJS = nil; [self.webView evaluateJavaScript:js completionHandler: ^(id data, NSError* err) { resultJS = [data copy]; } ]; if (resultJS != nil) { NSString* str = (NSString*)resultJS; NSLog(@"Result of JS = %@", str); } else { NSLog(@"Result of JS = nil"); } return resultJS; }
这是为什么呢?谢谢。
最佳答案
这是因为函数evaluateJavaScript
是异步执行的,所以当你执行if (resultJS != nil)
时,“completionHandler
"尚未执行,这就是你总是得到 nil
值的原因。
对此的最佳改进是尝试在“completionHandler
” block 内重写和调整代码,该 block 将管理 resultJS 数据。
关于javascript - 如何从 block 函数中获取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29261233/