【问题标题】:UIWebView not finishing loading?UIWebView 没有完成加载?
【发布时间】:2013-01-12 00:27:17
【问题描述】:

我的应用程序中有一个 webview。它加载了大部分页面,并且在加载完成时调用了函数 webViewDidFinishLoad。但是尽管页面似乎已加载,但某些页面加载并未完成。在这些情况下,(void)webViewDidFinishLoad:(UIWebView *)webView(void)webView:(UIWebView *)webView didFailLoadWithError 都不会被调用。例如:转到站点http://www.mynevadacounty.com/,当您单击任何项​​目(例如移动设备)时,页面加载不会在 UIWebView 中完成。

这可能是什么原因?

编辑:我尝试加载的这些网站中的大多数都是共享点网站

【问题讨论】:

    标签: ios uiwebview


    【解决方案1】:

    我最初在这里对这个异常进行了问答:UIWebView show UIActivityIndicator for loading but ignore additional load requests (e.g. javascript loaded advertisements) after page initially loads

    问题是网页将完成加载,然后开始加载其他元素(即广告、iFrame 等) 解决方案是在页面加载开始时存储当前 URL,如果 url 与上次加载的 URL 相同,则在下次“加载”时存储当前 URL,而不是误报...

    (在下面的代码中,网页在//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
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2010-10-30
      • 2010-12-12
      • 2013-10-30
      • 1970-01-01
      • 1970-01-01
      • 2016-12-26
      • 1970-01-01
      • 2015-06-14
      • 2011-02-10
      相关资源
      最近更新 更多