为什么我不能在UIWebView中关闭或驳回Javascript警报?

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

本文关键字:Javascript 警报 不能 UIWebView 为什么      更新时间:2023-09-26

情况:我通过UIWebView方法stringByEvaluatingJavaScriptFromString:调用Javascript alert,像这样…

[myWebView stringByEvaluatingJavaScriptFromString:@"alert('FOOBAR');"];

问题: iOS按预期显示提示"FOOBAR",但点击"Close"按钮并没有取消提示。

为什么我不能关闭Javascript警报?我怎么把它关起来?

这个问题让我对这个问题有了更深的了解。

GCD和webView死锁

要点是,从stringByEvaluatingJavaScriptFromString:方法处理JS的线程和处理iOS警报视图的线程可能相互阻塞,使"关闭"按钮无响应。

我的解决方法是用setTimeout推迟JS alert,就像这样…

NSString *jsMyAlert = @"setTimeout(function(){alert('FOOBAR');}, 1);";
[myWebView stringByEvaluatingJavaScriptFromString:jsMyAlert];

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