问题描述
我的应用程序中有一个 webview.它会加载大部分页面,并且在加载完成时会调用函数 webViewDidFinishLoad.但是尽管页面似乎已加载,但某些页面加载并未完成.在这些情况下 - (void)webViewDidFinishLoad:(UIWebView *)webView
和 (void)webView:(UIWebView *)webView didFailLoadWithError
都不会被调用.例如:转到网站 http://www.mynevadacounty.com/ 并点击任何UIWebView 中没有完成页面加载等项目.
I have a webview in my application.It loads most of the pages and the function webViewDidFinishLoad gets called when the loading finishes.But some of the pages loading doesn't finish although the pages appears to be loaded. In these cases neither - (void)webViewDidFinishLoad:(UIWebView *)webView
nor (void)webView:(UIWebView *)webView didFailLoadWithError
is getting called. For eg: Go to the site http://www.mynevadacounty.com/ and when you click on any of the items such as mobile the page loading doesn't finish in the UIWebView.
这可能是什么原因?
我尝试加载的这些网站中的大多数都是共享点网站
Most of these sites that i am trying to load are sharepoint sites
推荐答案
我最初在这里对这个异常做了一个问答:UIWebView 显示 UIActivityIndicator 用于加载,但在页面初始加载后忽略其他加载请求(例如 javascript 加载的广告)
I originally did a Q&A of this anomaly here: UIWebView show UIActivityIndicator for loading but ignore additional load requests (e.g. javascript loaded advertisements) after page initially loads
问题是网页将完成加载,然后开始加载其他元素(即广告、iFrame 等)解决方案是在页面加载开始时存储当前 URL,如果 url 与上次加载的 URL 相同,则在下次加载"时存储当前 URL,而不是误报...
The problem is that the webpage will finish loading and then it begins loading other elements afterwards (i.e. advertisements, iFrames, etc.) The solution is to store the current URL when page loading begins and the next time it is "Loading" if the url is the same as the last URL loaded than it's a false positive...
(在下面的代码中,网页在 //show UIActivityIndicator
上真正开始加载,并在 //hide 上真正完成主要内容(不是您正在努力处理的额外内容)的加载UIActivityIndicator
)
(In the code below the web page truly starts loading on //show UIActivityIndicator
and truly finishes loading the main content (not the extra content you are struggling with) on //hide UIActivityIndicator
)
//Define the NSStrings "lastURL" & "currentURL" in the .h file.
//Define the int "falsepositive" in the .h file. (You could use booleans if you want)
//Define your UIWebView's delegate (either in the xib file or in your code)
- (void)webViewDidFinishLoad:(UIWebView *)webView {
lastURL = [[NSString alloc] initWithFormat:@"%@", webView.request.mainDocumentURL];
if (falsepositive != 1) {
NSLog(@"Loaded");
//hide UIActivityIndicator
} else {
NSLog(@"Extra content junk (i.e. advertisements) that the page loaded with javascript has finished loading");
//This method may be a good way to prevent ads from loading hehe, but we won't do that
}
}
-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType; {
NSURL *requestURL =[request mainDocumentURL];
currentURL = [[NSString alloc] initWithFormat:@"%@", requestURL]; //not sure if "%@" should be used for an NSURL but it worked...
return YES;
}
- (void)webViewDidStartLoad:(UIWebView *)webView {
if ([currentURL isEqualToString:lastURL]) {
falsepositive = 1;
NSLog(@"The page is loading extra content with javascript or something, ignore this");
} else {
falsepositive = 0;
NSLog(@"Loading");
//show UIActiviyIndicator
}
}
这篇关于UIWebView 没有完成加载?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!