2

我的应用程序中有一个UIWebView

-(void)viewDidLaod{
    NSURL *url = [NSURL URLWithString:@"some url string"];
    NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadRevalidatingCacheData timeoutInterval:30.0];        
    myWbView.delegate = self;
        [myWebView loadRequest:request];

        if ([timer isValid]) {
            [timer invalidate];
        }else{
            timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(addSec:) userInfo:nil repeats:YES];
             //counting seconds
}

-(void)webViewDidFinishLoad:(UIWebView *)webView{
    if (webView.isloading){
    NSLog(@"LOADING");//it takes 5-8 seconds in average keep logging this
    }else{
    NSLog(@"FINISH");//since the request started,8-15 seconds later this is logged out
    }
}

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error{
NSLog(@"LOAD FAIL: %@",error);
}

这是我要加载的网页pageViewController,我将 webview 控制器放入其中,每次滑动到下一页时都会启动新的加载请求。

(当刷出视图dealloc时,我会停止任何未完成的加载,因此它不会阻塞网络踏板)

有时我会收到一些错误消息,例如:

来自 didFialLoadWithError 的错误

作为应用程序开发的新手,我完全不知道我的代码有什么问题,是某个线程卡住了还是使用 JavaScript/HTML5 的网页对速度很重要?

我研究了使用 webview 加载内容页面的 Flipboard 应用程序(iOS7 版本),它会在用户点击任何帖子后立即响应。即使 的加载速度UIWebView通常很慢,也可以实现更快的性能。

我应该知道的任何建议的指南链接/背景知识将不胜感激。

PS:由于WKWebView只有 iOS8 和更高版本才支持另一个更好的东西(在我的应用程序WKWebView中加载速度与 相同,但在HTML5 测试站点UIWebView得分更高),我仍然需要 iOS7 的 UIWebView。

4

2 回答 2

3

好吧,NSLocalizedDescription您打印的错误说明了发生了什么:“HTTP 重定向太多。”

当您尝试访问一个网页时,服务器不会给您您尝试访问的页面,而是可以通过重定向进行回复——您应该转到另一个页面的地址。例如,访问缩短的链接通常会将您重定向到真实页面;受密码保护的网站可能会将您重定向到登录页面;或者重新设计的网站可能会将旧地址重定向到新位置。

但是,如果不仔细实施,此功能最终可能会通过无限重定向浏览器来锁定浏览器:例如,想象一下如果www.example.com/a将您重定向到www.example.com/b,然后www.example.com/b将您重定向回www.example.com/a. 因此,浏览器对它们将遵循的重定向数量施加了限制——通常约为 10 或 15 个——以避免陷入此类循环。

您遇到的错误意味着,出于某种原因,访问该页面会导致您的浏览器连续多次重定向 - 如此之多,以至于它只是认为一定有问题并放弃了。

坐在这里没有要检查的应用程序副本,我无法告诉您这些重定向是什么,更不用说为什么要发出它们,但是您至少可以使用 Safari Web Inspector 回答第一个问题。您可以在 Safari 的“开发”菜单中找到它,该菜单可以在 Safari 偏好设置中启用;该菜单中有用于检查 iOS 设备或模拟器中的网页的选项。您可能还必须在设备或模拟器的 Safari 设置中打开 Web Inspector 选项。

Web Inspector 的时间线工具可以告诉您通过哪些重定向发送。一旦你知道了这一点,你就可以弄清楚它为什么会这样做,甚至可以调整你的应用程序来解决这个问题。(例如,你的 UIWebView 使用的用户代理字符串可能会混淆所涉及的服务器。不过,这是一个完整的猜测,所以不要假设这就是这里发生的事情。)

于 2015-03-19T02:21:48.877 回答
0

使用 performselector 在后台移动请求,否则它会阻塞您的 UI 线程。还有一点,UIWebView对象很重,

于 2015-03-18T11:01:46.390 回答