ios - UIWebView 可以检测到 Javascript 对话框何时将要显示吗?

标签 ios uiwebview uiwebviewdelegate

我是 iOS 开发新手。我有 Android 背景。

我想知道 UIWebView 是否可以检测何时将显示 Javascript 警报/确认/提示对话框? (类似于在 Web View 开始加载框架之前调用 UIWebViewDelegateshouldStartLoadWithRequest 方法。)

我正在寻找的 Android 等效项是 WebChromeClientonJSAlert(...)onJsConfirm(...)onJsPrompt(...) 方法,通过这些方法,应用程序可以决定是显示给定的对话框还是阻止它。

最佳答案

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

在 Javascript 中,当您想要调用警报时,请执行以下操作:

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

在 UIWebView 的委托(delegate)中,您可以拦截该请求并决定是否要通过 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。您可以在 URL 路径中添加更多参数。

显然,您必须将 SHOULD_SHOW_ALERT 与您自己的 if 子句交换,该子句决定是否显示警报,并且您必须将 showAlert() 函数添加到您的 Javascript .

关于ios - UIWebView 可以检测到 Javascript 对话框何时将要显示吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22990469/

相关文章:

ios - 获取表格 View 中点击的单元格(附件按钮)的位置

javascript - iOS 和安卓 webview : how to close webview and go back to App?

iPhone - 如何让自定义浏览器能够检测是否需要启用/禁用后退/前进按钮

ios - 在 UIAlertView 上检测 Yes 和 No

ios - 如何对 ViewController 中的项目进行分组以显示和隐藏?

iphone - 从字符串缓慢加载UIWebView

iOS 7 UIWebView 键盘问题

javascript - 从 iOS UIWebView 更新 React 组件中元素的值

ios - UIWebViewDelegate:页面内导航期间未调用 webViewDidFinishLoad

ios - remotebuild 无法在 iphone 6 设备上部署 cordova 应用程序 - iphone 5 设备工作正常