我一直在成功使用webView委托。但最近我遇到了这个代表的奇怪问题。在我目前的项目中,我试图从webview访问我的路由器。我只在URL内传递用户名和密码。下面是加载请求代码。
[self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://uname:password@192.168.1.1"]]];
这次调用webView委托方法(webViewDidFinishLoad和webViewDidStartLoad)5次。这是预期的吗?当我通过像google.com这样的简单网址时,它按预期工作。但是使用用户名和密码,为什么这些委托方法会被调用5次?
如果这种行为是正确的,那么我需要知道为什么它只调用了5次。原因是,在我的程序中 - 我在webViewDidFinishLoad方法中调用performSegueWithIdentifier,并且在当前形式中它调用segue 5次。对于解决方法,我可以维护计数,并且仅在第5次计数时调用performSegueWithIdentifier。
由于
答案 0 :(得分:14)
webViewDidStartLoad/webViewDidFinishLoad
。您的内容可能包含多个框架。
<强> webViewDidStartLoad:强> 在Web视图开始加载框架后发送。
答案 1 :(得分: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];
}
}
答案 2 :(得分:0)
每个HTML框架调用webViewDidStartLoad/webViewDidFinishLoad
一次,使用整数查找最后一帧加载完成的时间,
详细说明:
webViewDidStartLoad
webViewDidFinishLoad
webViewDidFinishLoad
检查整数是否为零时,表示网页的所有帧都已加载,现在调用选择器这是对@marvin的答案的解释
最佳方法:
检查isLoading
中的webViewDidFinishLoad
,isLoading
是否为假,做你想做的事
-(void)webViewDidFinishLoad:(UIWebView *)webview
{
if (!webview.isLoading)
{
// webview is done loading content.
// `performSegueWithIdentifier` / Your code Here
}
}