javascript - 如何从 block 函数中获取数据?

标签 javascript objective-c ios8 wkwebview

我从 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/

相关文章:

javascript - 仅选择一组中的一个复选框

ios - 为 UITableViewCell 中的特定单元格设置颜色

ios - 更改 Iphone 中的垂直约束

ios - 即使在设置中禁用了IDFA,也始终可以访问获取IDFA iOS 8

iOS8 图标大小和图标名称以及启动图像

javascript - 经过另一个时隐藏固定元素

javascript - SetTimeout 不延迟函数调用

ios - UITableViewCell indentationLevel 在 iOS 8 中不起作用

javascript - 切换开关在 chrome 中不起作用,但在 firefox 中起作用

ios - 如何在 iOS 中将 2 个单声道文件转换为单个立体声文件?