私はもともとこの異常のQ&Aをここで行いました:UIWebViewは読み込みのためにUIActivityIndicatorを表示しますが、ページが最初に読み込まれた後、追加の読み込みリクエスト(javascriptが読み込まれた広告など)を無視します
問題は、Webページの読み込みが完了し、その後、他の要素(つまり、広告、iFrameなど)の読み込みを開始することです。解決策は、ページの読み込みが開始されたときに現在のURLを保存し、次にURLが「読み込み中」の場合はURLを保存することです。誤検知よりも最後にロードされたURLと同じです...
(以下のコードでは、Webページは本当にロードを開始し//show UIActivityIndicator
、メインコンテンツ(苦労している余分なコンテンツではない)のロードを本当に終了します//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
}
}