我是iOS开发的新手。我来自Android背景。
我想知道UIWebView
是否有可能检测到何时会显示Javascript警报/确认/提示对话框? (类似于在Web视图开始加载框架之前调用shouldStartLoadWithRequest
UIWebViewDelegate
方法的方法。)
与我正在寻找的Android相当的是WebChromeClient
的{{1}},onJSAlert(...)
和onJsConfirm(...)
方法,并且通过这些方法,应用程序可以决定是否显示给定的对话框或阻止它。
答案 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中。