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