UIWebView可以检测何时显示Javascript对话框?

时间:2014-04-10 14:08:47

标签: ios uiwebview uiwebviewdelegate

我是iOS开发的新手。我来自Android背景。

我想知道UIWebView是否有可能检测到何时会显示Javascript警报/确认/提示对话框? (类似于在Web视图开始加载框架之前调用shouldStartLoadWithRequest UIWebViewDelegate方法的方法。)

与我正在寻找的Android相当的是WebChromeClient的{​​{1}},onJSAlert(...)onJsConfirm(...)方法,并且通过这些方法,应用程序可以决定是否显示给定的对话框或阻止它。

1 个答案:

答案 0 :(得分:2)

UIWebView没有在即将显示Javascript警报时调用的方法。但是,您可以使用shouldStartLoadWithRequest:通知UIWebView有关提醒的信息,然后决定是否将其显示:

在您想要调用警报的Javascript中执行以下操作:

window.location.href = "alert://MESSAGE_TEXT";

在您的UIWebView代理中,您可以拦截该请求并决定是否要通过javascript调用警报:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {

   switch (navigationType) {
      case UIWebViewNavigationTypeOther:
         if ([[request.URL scheme] isEqualToString:@"alert"]) {
            NSString *message = [request.URL host];
            if (SHOULD_SHOW_ALERT) {
               // the alert should be shown
               [webView stringByEvaluatingJavaScriptFromString:@"showAlert()"];
            } else {
              // don't show the alert
              // just do nothing
            }

            return NO;
         }
         break;
      default:
        //ignore
   }
   return YES;
}

我不知道您是否需要将消息文本发送到UIWebView,但我将其包含在内,以便您可以看到如何将参数发送到UIWebView。您可以在网址路径中添加更多参数。

显然,您必须将SHOULD_SHOW_ALERT与您自己的if子句交换,以确定是否显示警告,并且您必须将showAlert()函数添加到您的Javascript中。