导航回来时,UIWebView始终从服务器刷新

时间:2013-06-26 21:12:06

标签: javascript objective-c http caching uiwebview

我有一个针对平板电脑优化的网站。它在页面上显示一个链接以进行导航,该链接调用JavaScript函数window.history.back()。在iPad上的Safari浏览器中,此链接根据需要通过从历史记录加载缓存页面而不是向服务器发出另一个请求来工作。但是,当我在一个简单的本机应用程序中通过UIWebView打开同一个站点时,每次使用它导航回来时,同一个链接都会向服务器发出请求。

我发现我可以解决这个问题:

  1. 删除HTTP响应标头Pragma: no-cache
  2. 将Cache-Control标头设置为“max-age = 900”(15分钟)
  3. 但是,这些服务器端更改似乎仅对UIWebView有用,而对于Safari和Chrome等实际浏览器则不然。在某些情况下,本机应用程序开发人员对他们调用的服务器的控制有限或无法控制。因此,似乎最好让客户端控制UIWebView的这种行为,使其表现得像移动Safari为此目的。任何建议将不胜感激!

    请注意,我的大部分测试都是在iOS版本为6.1.3的iPad 2.0上完成的。

1 个答案:

答案 0 :(得分:0)

尝试使用此代码在webview中加载网址:

NSData * urlData; NSString * baseURLString = @“yoursite.com”; NSString * urlString = [baseURLString stringByAppendingPathComponent:@“yourfile”];

NSURLRequest * request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlString] cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:10.0]; NSURLConnection * connection = [[NSURLConnection alloc] initWithRequest:request delegate:nil];

if(连接) {     urlData = [NSURLConnection sendSynchronousRequest:request];

NSString *htmlString = [[NSString alloc] initWithData:urlData encoding:NSUTF8StringEncoding];
[webView loadHTMLString:htmlString baseURL:baseURLString];
[htmlString release];

}

[连接发布];