0

我有一个 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? 
4

1 回答 1

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 内容以获取成功登录页面包含的一些重要字符串。您可以通过调用获取 html 正文:

NSString *yourHTMLSourceCodeString = [webView stringByEvaluatingJavaScriptFromString:@"document.body.innerHTML"]; 

另一种方法是在确认登录的 web 视图中查找 cookie。

或者更好的是,使用原生登录表单,使用原生代码提交登录请求,使用 AFNetworking 或标准 http SDK 方法,并检查响应是否成功。

于 2013-04-03T22:26:16.350 回答