webview linkclicked

时间:2013-04-03 21:33:38

标签: iphone objective-c if-statement uiwebview webview

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

1 个答案:

答案 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方法,并检查响应是否成功。