我有一个创建几个 WebView 实例的应用程序,我想让它们尽可能独立地运行。
至少,我不希望他们共享 cookie。快速的谷歌搜索给了我类似“你不能”的结果。我希望有人有更好的答案。
我有一个创建几个 WebView 实例的应用程序,我想让它们尽可能独立地运行。
至少,我不希望他们共享 cookie。快速的谷歌搜索给了我类似“你不能”的结果。我希望有人有更好的答案。
基本答案是“你不能”。
看了一会儿,我认为这是可能的,但非常复杂。这将涉及在您的 WebView 上实现一个 resourceLoadDelegate,它实现-webView:resource:willSendRequest:redirectResponse:fromDataSource:
和修改请求以关闭HTTPShouldHandleCookies
并将任何相关的 cookie 手动添加到请求中。它还必须执行-webView:resource:didReceiveResponse:fromDataSource:
以找出从服务器返回的任何 cookie。您可以分配/初始化您自己的 per-webview 副本,NSHTTPCookieStorage
并使用它来存储/检索 cookie。
这篇文章总结了你可以做什么。我不确定这对您是否可行,我觉得这不是一项简单的任务,甚至可能有风险,但它似乎是可能的:作者声称 iCab 就是这样做的。
我也希望有一个更简单的解决方案,真的。当然,由于 Webkit 是开源的,我猜你可以推出你自己的框架版本并改变行为?
我会假设 cookie 将在服务/应用程序级别配置,而不是针对特定实例或进程。也许您可以修改您的问题以找到解决您遇到的问题的方法,该问题要求实例不共享 cookie。
不在实例之间共享 cookie 的动机是什么?
如果您只需要对同一个 Web 资源的 3 个视图,您可以设置一些指向同一个数据源的虚拟主机。
您可以做的是查看libcurl,它可以处理不与 URL 加载系统范围的 cookie 存储混合的 cookie 存储,用于您想要分离的那些请求。对我来说,这似乎是一个有效且简单的解决方案。如果你真的需要依赖 webview/webkit,它可能不是。