A界面为Webview,B界面扫描二维码后,返回A界面,直接弹出JS的Alert,Alert的确定无法响应

A界面为Webview,B界面扫描二维码后,返回A界面,直接弹出JS的Alert,Alert的"好"无法响应


A界面为Webview,B界面扫描二维码后,返回A界面,直接弹出JS的Alert,Alert的确定无法响应_第1张图片

网上的解释

This question gave me the most insight to the problem...

Deadlock with GCD and webView

The gist is that the thread handling the JS from the stringByEvaluatingJavaScriptFromString: method and the thread handling the iOS alert view are probably blocking each other, making the "Close" button unresponsive.

My workaround is to defer the JS alert with a setTimeout, something like this...

NSString *jsMyAlert = @"setTimeout(function(){alert('FOOBAR');}, 1);";

[myWebView stringByEvaluatingJavaScriptFromString:jsMyAlert];

To avoid any risk of deadlock, it might be better to have the UIWebView trigger an UIAlertView rather than rely on UIWebView to handle the JS alert. The workaround above would be suitable for most debugging purposes though.

注意setimeout中的第一个参数必须是function  不能直接alert  否则还是会lock

解决办法

[webview performSelectorOnMainThread: @selector(stringByEvaluatingJavaScriptFromString:) withObject: jsString waitUntilDone: NO];

你可能感兴趣的:(A界面为Webview,B界面扫描二维码后,返回A界面,直接弹出JS的Alert,Alert的确定无法响应)