【问题标题】:webview linkclickedwebview 链接点击
【发布时间】:2013-04-03 21:33:38
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    让你的控制器实现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"]; 
    

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

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

    【讨论】:

    • 谢谢!我会尝试你的第一个答案,如果我不成功,我会尝试找到一个成功字符串 - 尽管我认为没有。
    • 如果成功登录包含重要字符串,我该怎么做?
    • 该站点似乎不包含任何类似的字符串,相反,允许访问该站点的用户是登录成功。我也寻找过 cookie,但登录前后的 cookie 是相同的——只有 cookie 的值发生了变化。所以我最后的手段是尝试标准的 SDK 方法。不过我对此一无所知。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-12
    • 2011-05-12
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 2018-07-17
    相关资源
    最近更新 更多