具有基本URL的iOS 6 UIWebView loadHTMLString

时间:2012-10-05 09:32:45

标签: ios uiwebview ios6 uiwebviewdelegate

我在iOS 6上遇到了很大的问题。

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

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

我真的需要一个答案。

当我创建一个空的应用程序,这一切,一切正常,如果我把它放在一个应用程序,它启动之前做一些网络,问题弹出。所以这很难被隔离,但就UIWebView而言,我认为这个问题与baseURL有关,但这只是一种感觉。

2 个答案:

答案 0 :(得分:1)

UI 5与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导致共享应用程序加载到barf。因为这是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;
}

答案 1 :(得分:0)

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

调用webview的My View控制器位于静态库中,因为它正在其他应用程序中重复使用。通过将代码移出静态库并将其移动到自己的应用程序中,应用程序开始运行得更好,Web视图的工作方式与现在的预期相同。 iOS 5和iOS 6之间没有任何区别。

但是通过添加此代码,它确实产生了巨大的差异:

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

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