【问题标题】:reloading UIWebView makes it blank重新加载 UIWebView 使其空白
【发布时间】:2013-04-22 11:58:57
【问题描述】:

我正在使用以下方法在 UIWebView 中加载网页

 [NSURLConnection sendAsynchronousRequest:request
                                    queue:loadingQueue
                        completionHandler:^(NSURLResponse *response,
                                           NSData *data,
                                           NSError *error) {
                            if(!error) {
                                [_webView loadData: data
                                          MIMEType: [response MIMEType]
                                  textEncodingName: [response textEncodingName]
                                           baseURL:nil];
                           }
                       }];

首先,对于一些页面,图像根本没有加载。其次,当我稍后刷新页面时

      [_webView reload];

网络视图变为空白。

有人知道这里发生了什么吗?

TIA, 尼基尔

【问题讨论】:

    标签: ios uiwebview nsurlconnection


    【解决方案1】:

    我正在使用以下方法在 UIWebView 中加载网页[NSURLConnection sendAsynchronousRequest

    好吧,不要。 UIWebView 已经知道如何从 Internet 获取数据,并异步加载其请求。因此,只需通过调用loadRequest: 将请求交给 UIWebView。现在坐下来等待委托消息到达。如果有问题,委托消息会告诉你。

    【讨论】:

    • 我的问题是,我正在加载多个 UIWebViews,我意识到 NSURLConnection 是唯一的方法,就像多线程一样。否则我的 UIWebViews 加载非常缓慢(因为它们都填充了主线程)。有什么建议吗?
    • 不,他们没有。我刚刚说过,它是异步发生的。这意味着 UIWebView 有自己的后台线程。它已经是多线程的了。
    • 你也许是对的。视图中的多次重新加载/闪烁以及 UIWebView 的 loadRequest 方法的交付速度较慢,这让我分心了。
    • 造成延迟和闪烁的原因可能是 网络 上的负载(多个同时请求)。您可以使用 suppressesIncrementalRendering 停止闪烁(在 iOS 6 上),但使用委托方法顺序加载 Web 视图可能是明智的。
    • 或者,在显示 Web 视图之前加载它们(并使用委托方法知道何时发生)。
    【解决方案2】:

    经过几次迭代和网络搜索,我了解到这个问题的发生主要(如果不是唯一的话)是因为网站具有相对路径。

    期待至少第一个问题会解决,我修改了

         [_webView loadData: data
                   MIMEType: [response MIMEType]
           textEncodingName: [response textEncodingName]
                    baseURL: nil];
    

    将baseURL包含为

                    baseURL: [request URL]];
    

    令人惊讶的是,这两个问题都解决了。我可以理解为什么它有助于解决“图像未下载”部分,但如果 baseURL 不存在,我无法猜测已经(成功)加载的页面会变成空白的原因。

    任何人都可以对此有所了解吗?

    谢谢, 尼基尔

    【讨论】:

      【解决方案3】:

      对我来说,第一次调用 loadData 效果很好,但下一次调用会加载空白页。

      我尝试了以下解决方法并且它有效:

      [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"about:blank"]]];
      [webView loadData:data MIMEType:mimeType textEncodingName:@"UTF-8" baseURL:[NSURL new]];
      

      因此调用 loadRequest 修复了 webView 的状态。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-10-22
        • 1970-01-01
        • 2013-11-23
        • 2020-03-09
        • 2017-01-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多