【问题标题】:Why can't I close or dismiss a Javascript alert in UIWebView?为什么我不能关闭或关闭 UIWebView 中的 Javascript 警报?
【发布时间】:2014-05-23 16:06:24
【问题描述】:

情况:我像这样通过UIWebView方法stringByEvaluatingJavaScriptFromString:调用了一个Javascriptalert...

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

问题:iOS 按预期显示“FOOBAR”警报,但点击“关闭”按钮不会关闭警报。

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

【问题讨论】:

    标签: javascript ios uiwebview


    【解决方案1】:

    这个问题让我对这个问题有了最深刻的了解……

    Deadlock with GCD and webView

    要点是处理来自stringByEvaluatingJavaScriptFromString:方法的JS的线程和处理iOS警报视图的线程可能相互阻塞,导致“关闭”按钮无响应。

    我的解决方法是用 setTimeout 推迟 JS alert,类似这样...

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

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

    【讨论】:

    • 这个 bug 还在 iOS 9 中...唉。
    • 仍在 iOS 11 中
    猜你喜欢
    • 1970-01-01
    • 2010-10-02
    • 1970-01-01
    • 2021-03-08
    • 2015-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多