当使用GCD调用时,UIWebView stringByEvaluatingJavaScriptFromString在iOS5.0/5.1上挂起

nee*_*vek 10 objective-c uiwebview grand-central-dispatch ios

我有以下代码viewDidLoad,它在iOS 4.3上正常工作,但它挂在iOS 5/5.1上.在iOS 5/5.1上,显示警告对话框但无法解除,UI线程冻结,无法单击确定按钮.

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    dispatch_sync(dispatch_get_main_queue(), ^{
        [self.webview stringByEvaluatingJavaScriptFromString:@"alert('HELLO WORLD!')"];
    });
});
Run Code Online (Sandbox Code Playgroud)

这是一个错误吗?

小智 18

经过测试,我认为它是一个Bug,并改变使用的代码

[webView performSelectorOnMainThread:@selector(stringByEvaluatingJavaScriptFromString:) withObject:js waitUntilDone:NO]
Run Code Online (Sandbox Code Playgroud)

会解决它.

  • 我发现如果webview调用块中的"stringByEvaluatingJavaScriptFromString"会导致同样的问题,它会在调用js-alert之后冻结. (2认同)