1

アプリケーションにWebビューがあり、ほとんどのページが読み込まれ、読み込みが完了すると関数webViewDidFinishLoadが呼び出されますが、一部のページの読み込みは、ページが読み込まれているように見えても終了しません。これらの場合、どちら も呼び出され(void)webViewDidFinishLoad:(UIWebView *)webViewません。(void)webView:(UIWebView *)webView didFailLoadWithError例:サイトhttp://www.mynevadacounty.com/にアクセスし、モバイルなどのアイテムのいずれかをクリックしても、UIWebViewでページの読み込みが完了しません。

これの考えられる原因は何でしょうか?

編集:私がロードしようとしているこれらのサイトのほとんどはSharePointサイトです

4

1 に答える 1

3

私はもともとこの異常のQ&Aをここで行いました:UIWebViewは読み込みのためにUIActivityIndi​​catorを表示しますが、ページが最初に読み込まれた後、追加の読み込みリクエスト(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
    }
}
于 2013-01-12T03:52:21.503 に答える