为什么我无法在UIWebView中关闭或忽略Javascript警告框?

4

情境: 我通过 UIWebView 方法 stringByEvaluatingJavaScriptFromString: 调用一个 Javascript 的 alert,代码示例如下...

[myWebView stringByEvaluatingJavaScriptFromString:@"alert('FOOBAR');"];
问题:iOS显示了一个预期的“FOOBAR”警报,但是点击“关闭”按钮无法关闭警报。

为什么我无法关闭JavaScript警报?如何关闭它?

1个回答

8
这个问题让我对问题有了最深刻的认识... 使用GCD和webView时的死锁问题 要点是处理stringByEvaluatingJavaScriptFromString:方法的JS的线程和处理iOS警告视图的线程可能会相互阻塞,使得"关闭"按钮无响应。
我的解决方法是使用setTimeout推迟JS的alert,类似于这样...
NSString *jsMyAlert = @"setTimeout(function(){alert('FOOBAR');}, 1);";

[myWebView stringByEvaluatingJavaScriptFromString:jsMyAlert];

为了避免死锁的风险,最好让UIWebView触发一个UIAlertView,而不是依赖于UIWebView来处理JS alert。虽然上面的解决方法对于大多数调试目的来说是适用的。

1
这个漏洞仍然存在于iOS 9中...唉。 - Alex Beals
仍然在iOS 11中。 - Ahmed Khalaf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接