【问题标题】:iOS 6 UIWebView loadHTMLString with base URLiOS 6 UIWebView loadHTMLString 与基本 URL
【发布时间】:2012-10-05 09:32:44
【问题描述】:

我在 iOS 6 上遇到了一个大问题。

我需要在应用启动时显示一个网页。我为此使用了 loadHTMLString。在 iOS 6 之前的所有东西上,一切都按预期工作,但在 iOS 6 上,它似乎需要大约。 2 分钟加载任何不是文本的内容。所有图像等每加载 2 分钟,这使我的页面加载只需大约 8 分钟。这在 iOS 5.1 及更低版本上运行得非常快。

这是我在网站上发现的一个问题,它解释了我的问题,但没有答案:https://devforums.apple.com/message/724010

我真的需要一个答案。

当我创建一个执行此操作的空应用程序时,一切正常,如果我将它放入一个在启动之前执行某些网络的应用程序中,就会弹出问题。所以这很难隔离,但据我所知 UIWebView,我认为问题与 baseURL 有关,但这只是一种感觉。

【问题讨论】:

  • 能否将 html 文件写入您的文档目录,然后从那里加载?
  • 你认为这会有帮助吗?
  • 是的,我想是的。我们从那里加载非常大和复杂的 HTML 文档,它在 iOS6(和 iOS5)上非常快。
  • 我已经对此进行了调查,也许这可能会解决问题,但不幸的是,这是不可能的,因为拥有该网站的公司希望能够随时更改网站,所以所有徽标等随时可能改变

标签: ios uiwebview ios6 uiwebviewdelegate


【解决方案1】:

UIWebView 在 iOS 5 和 6 之间的消息略有不同

- (BOOL) webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType

在调用 loadHTMLString:baseURL: 时发送到 iOS 6 中的视图委托,但在 iOS 5 中不是这种情况。我的委托方法是

- (BOOL) webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    [[UIApplication sharedApplication] openURL:[request URL]];
    return NO;
}

似乎是一个空的基本 URL 导致共享应用程序加载失败。由于这是 iOS 6 的新功能,这似乎是罪魁祸首,也许你有类似的东西。在委托方法中检查空的基本 url 解决了我的问题。它不漂亮,但很有效。

- (BOOL) webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    if ( [@"file:///" isEqualToString:[[request URL] absoluteString]] ) {
        return YES;
    }

    [[UIApplication sharedApplication] openURL:[request URL]];
    return NO;
}

【讨论】:

  • 我知道这并没有解决我的问题
【解决方案2】:

我不确定为什么这解决了我的问题,但确实解决了。

调用 webview 的视图控制器位于静态库中,因为它在其他应用程序中被重复使用。只需将代码从静态库中移出并放入应用程序本身,应用程序就开始运行得更好,并且 Web 视图也能正常运行。 iOS 5 和 iOS 6 之间不再有任何区别。

但是通过添加这段代码,它确实产生了巨大的变化:

NSHTTPCookie *cookie;
NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (cookie in [storage cookies]) {
    [storage deleteCookie:cookie];
}

就像我说的,我无法解释为什么将代码移动到应用程序本身而不是将其作为库和上面的代码工作,但我确信它与 webview 的缓存方式有关。

【讨论】:

    猜你喜欢
    • 2012-11-24
    • 2012-09-10
    • 1970-01-01
    • 2013-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    相关资源
    最近更新 更多