webViewDidFinishLoad多次调用单次loadrequest

Ash*_*ish 6 uiwebview ios

我很长时间以来一直在成功使用webView委托.但最近我遇到了这个代表的奇怪问题.在我目前的项目中,我试图从webview访问我的路由器.我只在URL内传递用户名和密码.下面是加载请求代码.

[self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://uname:password@192.168.1.1"]]];
Run Code Online (Sandbox Code Playgroud)

这将调用webView委托方法(webViewDidFinishLoad和webViewDidStartLoad)5次.这是预期的吗?当我通过像google.com这样的简单网址时,它按预期工作.但是使用用户名和密码为什么这些委托方法会被调用5次?

如果这种行为是正确的,那么我需要知道它为什么只调用5次.原因是,在我的程序中 - 我在webViewDidFinishLoad方法中调用performSegueWithIdentifier,并且在当前形式中它调用segue 5次.对于解决方法,我可以维护计数,并且仅在第5次计数时调用performSegueWithIdentifier.

谢谢

Tom*_*ift 14

webViewDidStartLoad/webViewDidFinishLoad每个HTML框架调用一次.您的内容可能包含多个框架.

请参阅UIWebViewDelegate文档.

webViewDidStartLoad: 在Web视图开始加载框架后发送.


小智 6

这个方法对我有用...... :)

#pragma mark UI Web View Delegate
NSInteger webViewLoads;
//a web view starts loading
- (void)webViewDidStartLoad:(UIWebView *)webView{
    webViewLoads++;
    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
    [SVProgressHUD showWithStatus:@"Loading..." maskType:SVProgressHUDMaskTypeBlack];
}

//web view finishes loading
- (void)webViewDidFinishLoad:(UIWebView *)webView{
    webViewLoads--;
    [self performSelector:@selector(webViewFinishLoadWithCondition) withObject:nil afterDelay:0.5];
}

//web view handling error
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error{
    webViewLoads--;
        NSLog(@"Web View Did Fail Load With Error : %@",error);
        [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
        [SVProgressHUD dismiss];
}

-(void)webViewFinishLoadWithCondition{
    if(webViewLoads==0){
        [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
        [SVProgressHUD dismiss];
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这可以使用更多解释.它究竟是如何解决问题的? (3认同)