Why can't I close or dismiss a Javascript alert in UIWebView?

ios, javascript, uiwebview

Solution

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.

Problem

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?

Original source

Related problems