我是 iOS 开发新手。我有 Android 背景。
我想知道 UIWebView
是否可以检测何时将显示 Javascript 警报/确认/提示对话框? (类似于在 Web View 开始加载框架之前调用 UIWebViewDelegate
的 shouldStartLoadWithRequest
方法。)
我正在寻找的 Android 等效项是 WebChromeClient
的 onJSAlert(...)
、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/