在 iPhone 和 iPad 上使用 UIWebView 进行隐私浏览

Posted

技术标签:

【中文标题】在 iPhone 和 iPad 上使用 UIWebView 进行隐私浏览【英文标题】:Private browsing with UIWebView on the iPhone & iPad 【发布时间】:2010-06-14 10:58:57 【问题描述】:

现有应用如何实现此功能???

我可以只为某些网站存储 cookie,并且只存储在我的应用程序中吗?据我了解,Web 视图以共享模式存储 cookie...以便与 Safari 和其他使用 UIWebView 的应用程序共享它们。

【问题讨论】:

确认一下,您说的是隐私浏览还是匿名浏览? 实际上是隐私浏览。我希望能够彻底清除下载的图像和 cookie 的缓存。 请考虑将标题从“匿名浏览”更改为“私人浏览”,以免误导其他搜索它的人。它们是两种完全不同的东西。 【参考方案1】:

根据NSHTTPCookieStoragedocs,应用程序之间不共享cookie:

iPhone OS 注意:Cookie 不共享 在 iPhone OS 中的应用程序中。

所以默认情况下它们似乎应该是“私有的”。您也可以使用[NSHTTPCookieStorage sharedHTTPCookieStorage] 对象将cookie 存储策略设置为根本不存储cookie,或者您可以根据需要使用deleteCookie: 方法自行清理。

对于你的 UIWebview 加载的其他内容,当你创建你的 webview 加载的 NSURLRequest 时,你可以设置一个缓存策略来控制内容是否被缓存。例如:

NSURLRequest * request = [NSURLRequest requestWithURL: [NSURL URLWithString: url]
                                          cachePolicy: NSURLRequestReloadIgnoringLocalAndRemoteCacheData
                                       timeoutInterval: 60.0]
[webView loadRequest: request];

NSURLRequestReloadIgnoringLocalAndRemoteCacheData 告诉请求忽略缓存并从网络加载请求。我不确定它是否还会阻止来自网络的响应被缓存,但可以肯定的是,您始终可以自己将其从缓存中删除:

[NSURLCache sharedURLCache] removeCachedResponseForRequest:request];

【讨论】:

【参考方案2】:

如果您在谈论隐私浏览,则 UIWebView 实际上不会在应用关闭后存储历史记录(只是暂时用于来回)。相反,您必须自己实现存储历史记录,因此它会自动成为隐私浏览。

简短回答:不要做任何事情。它已经处于隐私浏览模式。

编辑:为了处理缓存检查这个方法:

- (NSCachedURLResponse *)connection:(NSURLConnection *)connection willCacheResponse:(NSCachedURLResponse *)cachedResponse

并使 cashedResponse 返回 nil。

【讨论】:

嗯...关于历史记录还可以...但是缓存的图像和 cookie 呢?我认为至少保留了 cookie,并且可能还保留了图像……不? 谢谢 thyrgle...这听起来像是一个很好的回应但是...我在哪里/如何在 UIWebView 中实现它?或者我应该在 NSURLCache 的子类中实现,如下所示:icab.de/blog/2009/08/18/… 实现这一点是否有用,UIWebView OS 是否不存储缓存?

以上是关于在 iPhone 和 iPad 上使用 UIWebView 进行隐私浏览的主要内容,如果未能解决你的问题,请参考以下文章

为 iPad 和 iPhone 使用相同的 XIB

如何在 iPad/iPhone 上使用 ICC 配置文件?

Kinvey 无法在 iPhone 和 iPad 上运行

html5 视频无法在 iPad 上播放 - 在 iPhone 上播放

在 iPad 和 iPhone 上显示 UIwebview

具有自动布局左边距的 UITableViewCell 在 iPhone 和 iPad 上不同