我有一个webview加载一个带有html表单的网站。当用户输入其登录凭证并按下提交按钮时,用户将被发送到新的视图控制器。如果用户输入错误的凭据,我想阻止这种情况发生。如果输入了错误的凭据,则网站地址保持不变。我可以以某种方式说:
if (navigationType == UIWebViewNavgiationTypeLinkClicked) {
if (url remains the same == alert view saying wrong credentials was entered.
if (url changes - perform segue to new view controller?
答案 0 :(得分:0)
让您的控制器实施UIWebViewDelegate
。当你这样做时,将在Web请求的不同阶段调用一堆回调。您可能想要实现的是:
- (void)webViewDidFinishLoad:(UIWebView *)webView {
// Be sure to use mainDocumentURL, because any iframes on your form page will
// also trigger this callback
NSString *completedurl = webView.request mainDocumentURL.absoluteString;
// Let's assume you have your form url in the string property self.formurl
if ([completedurl isEqualToString:self.formurl]) {
// Display your alert view saying that the credentials were incorrect
} else {
// Perform segue to next controller
}
但整个解决方案有点可怕,因为任何其他错误页面或其他任何内容 欺骗你的应用程序相信用户已成功登录。更好的方法可能 是检查webview的html内容中的一些重要字符串 success-login-page包含。您可以通过调用:
来获取html正文NSString *yourHTMLSourceCodeString = [webView stringByEvaluatingJavaScriptFromString:@"document.body.innerHTML"];
另一种方法是在webview中查找确认登录的cookie。
甚至更好,使用本机登录表单,使用本机代码提交登录请求 AFNetworking或标准的http SDK方法,并检查响应是否成功。