Situation: I invoke a Javascript alert
through the UIWebView
method stringByEvaluatingJavaScriptFromString:
like this...
[myWebView stringByEvaluatingJavaScriptFromString:@"alert('FOOBAR');"];
Problem: iOS displays an alert saying "FOOBAR" as expected, but tapping on the "Close" button does not dismiss the alert.
Why can't I close the Javascript alert? How do I get it to close?
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With